给定二叉搜索树的根结点 root
,返回值位于范围 [low, high]
之间的所有结点的值的和。
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 输出:32
解题思路:
1.遍历整颗树,左子树和右子树
2.判断当前节点值与low,high的大小关系
2.1 当前节点为空 : 返回0
2.2 当前节点的值>high: 这颗子树所有右子树节点的值肯定比high大,只考虑左子树 (例: 5<=low (low=7) 则只考虑子树 5 的右子树)
2.3 当前节点的值<low: 这颗子树所有左子树节点的值肯定比low小,只考虑右子树 ( 例: 15>=high (high=15) 则只考虑子树 15 的左子树)
2.4 当前节点在[low, high]
之间 : 遍历左右子树(左右子树肯能会有2.1,2.2 ,2.3的情况)
3.递归调用,得到答案(10+15+7=32)
代码如下:
class Solution {
int sum = 0;
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);
}
}