用时: 偷偷看了答案

本来把问题想复杂了,想着维护一个最大堆,从上往下传递然后每次判断是否大于最大值

看了答案后发现只需要传递一个max,判断是否比max大,然后从下到上获取左右节点的值,返回左右节点和 加自身是否符合就好了

var goodNodes = function(root,max = root.val) {
    if (!root) return 0    var left = 0    max = Math.max(max,root.val)
    if (root.left) {
        left = goodNodes(root.left,max)
    }
    var right = 0    if (root.right) {
        right = goodNodes(root.right,max)
    }
    console.log(left,right,root.val)
    return (left + right) + (root.val >= max ? 1 : 0)
};