给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。
「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。
question:如何没有图示,你会发现根节点也算是一个好节点吗?
输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。
第一次写的时候用了HashSet,以为会有重复的节点,是我多虑了
第二次,讲HashSet改为cnt计数,瞬间快了2ms
int cnt = 0;
public int goodNodes(TreeNode root) {
// 从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值
dfs(root, root.val);
return cnt;
}
public void dfs(TreeNode root, int val) {
if (root == null) {
return;
}
if (val <= root.val) {
cnt++;
}
dfs(root.left, Math.max(val, root.val));
dfs(root.right, Math.max(val, root.val));
}
end.