题目链接
统计二叉树中好节点的数目
题目描述
注意点
- 二叉树中节点数目范围是 [1, 10^5]
- 每个节点权值的范围是 [-10^4, 10^4]
- 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值
解答思路
- 深度优先遍历存储每条路径的最大值,在深搜的过程中,将当前节点的值与最大值进行比较,如果不比最大值小,说明当前节点是好节点,结果需要加1,且更新最大值;如果比最大值小,则当前节点不是好节点,继续遍历其左右节点
代码
class Solution {
public int goodNodes(TreeNode root) {
return dfs(root, Integer.MIN_VALUE);
}
public int dfs(TreeNode root, int maxVal) {
if (root == null) {
return 0;
}
if (root.val >= maxVal) {
return dfs(root.left, root.val) + dfs(root.right, root.val) + 1;
} else {
return dfs(root.left, maxVal) + dfs(root.right, maxVal);
}
}
}
关键点