#Tree23. 树的统计信息(入门)

树的统计信息(入门)

练习 14:树的统计信息(入门)

题目描述:

给定一棵以 1 为根的有根树,每个结点有一个权值 w[i]。现在要统计这棵树的信息:

  1. 结点的总个数
  2. 所有结点权值的最大值
  3. 所有结点权值的最小值
  4. 所有结点权值的总和

输入格式:

  • 第一行:一个正整数 n2 ≤ n ≤ 1000
  • 第二行:n-1 个正整数 f_2, f_3, ..., f_n,其中 f_i 表示结点 i 的父结点编号
  • 第三行:n 个正整数 w[1], w[2], ..., w[n],表示每个结点的权值(1 ≤ w[i] ≤ 1000

输出格式:

  • 第一行:一个整数,表示结点总个数
  • 第二行:一个整数,表示权值最大值
  • 第三行:一个整数,表示权值最小值
  • 第四行:一个整数,表示权值总和

样例输入:

5
1 1 2 2
10 5 8 3 2

样例输出:

5
10
2
28

样例解释:

树的结构:

      10
     / \
    5   8
   / \
  3   2
  • 结点总个数:5
  • 权值最大值:10
  • 权值最小值:2
  • 权值总和:10 + 5 + 8 + 3 + 2 = 28

提示:

  • 方法1:DFS 遍历统计

    • 在 DFS 过程中,每访问一个结点就更新统计信息
    • 用全局变量记录:cnt(个数)、maxVal(最大值)、minVal(最小值)、sum(总和)
  • 方法2:直接遍历数组

    • 因为已经知道有 n 个结点,可以直接遍历 w[1..n] 数组统计
    • 但用 DFS 更符合“树遍历”的练习目的

练习建议:

  • 这道题主要是练习树的遍历统计信息的基本操作
  • 建议先用 DFS 方法实现,理解如何在遍历过程中收集信息
  • 然后再用直接遍历数组的方法,对比两种方法的区别