统计二叉树中好节点的数量
好节点的定义是:从根节点到该节点的路径中,该节点的数值是路径中最大的数值。
实现方法是深度遍历,依次去遍历树的每一条路径,从上到下遍历每一个节点。利用一个链表把到达某个节点的路径中的最大数值存储起来,等到这个节点遍历结束之后再把该值移除。
这样的话就能得到结果了。
class Solution {
public int goodNodes(TreeNode root) {
List<Integer> max = new ArrayList<Integer>();
return dfs(root, max);
}
private int dfs(TreeNode root, List<Integer> max){
int ans = 0;
if(root == null){
return 0;
}
if(max.isEmpty()){
max.add(root.val);
}
int maxNum = Math.max(max.get(max.size() - 1), root.val);
if(maxNum == root.val){
ans++;
}
max.add(maxNum);
if(root.left != null){
ans += dfs(root.left, max);
}
if(root.right != null){
ans += dfs(root.right, max);
}
max.remove(max.size() - 1);
return ans;
}
}