这里不太好理解的是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);
}
}