leetcode 938

128 阅读1分钟

image.png

image.png

这里不太好理解的是root.val

当递归左子树左节点到3是,root.val 是3, 当递归左子树右节点时,root.val 是7

if (root.val >= low && root.val <= high) {
            result = result + root.val;
        }
        
        
这段代码逻辑比较让人困惑,root.val既是左右子节点,又是左右子节点的根root.val本身  

递归角度的理解也没毛病,左右子节点返回相加result 再加root.val,当左右子节点本身也走这个判断逻辑

下面这个解决更优美和易懂点

class Solution {
    public int rangeSumBST(TreeNode root, int low, int high) {
        if (root == null) {
            return 0;
        }
        if (root.val > high) {
            return rangeSumBST(root.left, low, high);
        }
        if (root.val < low) {
            return rangeSumBST(root.right, low, high);
        }
        return root.val + rangeSumBST(root.left, low, high) + rangeSumBST(root.right, low, high);
    }
}