好的节点X是指从root到X的路径中,X的值最大。
找出二叉树中一共多少个好的节点。
思路:
因为好的节点X是从root到X的路径中,判断X的值是不是最大。
所以要用max变量记录一条路径中的最大值。
主要问题是要解决怎么走一条路径。
要清楚的是root同时在左子树和右子数的路径中,所以在记录最大值时,root.val要同时和左子树和右子树的节点比较。
root, root.left, root.right, 这个顺序就是前序遍历。
注意要记录的不是全局最大值,而是root到当前节点路径中的最大值,
max变量通过参数传递,并不会修改传递前的值(理解这点很重要)。
class Solution {
int num = 0;
public int goodNodes(TreeNode root) {
int max = -100000;
preOrder(root, max);
return num;
}
void preOrder(TreeNode root, int max) {
if(root == null) return;
if(root.val >= max) {
max = root.val;
num ++;
}
preOrder(root.left, max);
preOrder(root.right, max);
}
}