class Solution {
public:
int dfs(TreeNode* root, int maxv)
{
//如果链表为空,那就返回一个0
if(root == nullptr) return 0;
int res = maxv <= root->val; //如果说maxv <= root->val; 就返回1,否则返回0
//然后maxv需要更新为当前节点的值,毕竟maxv每次都要和新的节点值进行比较
maxv = max(maxv, root->val);
//这里需要注意,要加上res, 因为每次递归,值为判断一个节点
return res + dfs(root->left, maxv) + dfs(root->right, maxv);
}
int goodNodes(TreeNode* root)
{
//好节点就是在遍历过程中,当前节点的值一定小于等于前一个节点的值,
//那么可以左右遍历这个二叉树的左右节点。
int maxv = INT_MIN;
return dfs(root, maxv);
}
};
递归过程: