#Tree23. 树的统计信息(入门)
树的统计信息(入门)
练习 14:树的统计信息(入门)
题目描述:
给定一棵以 1 为根的有根树,每个结点有一个权值 w[i]。现在要统计这棵树的信息:
- 结点的总个数
- 所有结点权值的最大值
- 所有结点权值的最小值
- 所有结点权值的总和
输入格式:
- 第一行:一个正整数
n(2 ≤ 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 方法实现,理解如何在遍历过程中收集信息
- 然后再用直接遍历数组的方法,对比两种方法的区别