题目
给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。
「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。
思路
容易想到,使用 DFS递归。
- 递归的时候,传递之前的经过路径中的最大值
- 如若当前节点小于(之前路径中的)最大值,则不计入好节点
- 否则,计入好节点,并且将自己和最大值,进行比较,确定新的最大值
Java 代码
// 递归的时候传入最大值
class Solution {
public int goodNodes(TreeNode root) {
if (root == null) return 0;
int max = root.val;
return helper(root, max);
}
public int helper(TreeNode root, int max){
int count;
// 当前值小于之前路径中的值,则当前数不是好节点
if(root.val < max)
count = 0;
else
count = 1;
// 比较谁更大
max = Math.max(max, root.val);
// 左右孩子递归
if(root.left != null)
count += helper(root.left, max);
if(root.right != null)
count += helper(root.right, max);
return count;
}
}