给定二叉搜索树的根结点 root
,返回 L
和 R
(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。
示例1:
输入: root = [10,5,15,3,7,null,18], L = 7, R = 15
输出: 32
示例2:
输入: root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出: 23
提示:
- 1.树中的结点数量最多为
10000
个。 - 2.最终的答案保证小于
2^31
。
思路:
这道题一开始没理解要输出的结点的值是指哪些结点,之后通过示例推算,要的是返回L <= root.val <= R
所有值的总和,也就输出结点值大于等于L小于等于R的所有值的总和。
代码:
class Program
{
static void Main(string[] args)
{
TreeNode root = new TreeNode(10);
root.left = new TreeNode(5);
root.right = new TreeNode(15);
root.left.left = new TreeNode(3);
root.left.right = new TreeNode(7);
root.right.right = new TreeNode(18);
Console.WriteLine(RangeSumBST(root, 7, 15));
Console.ReadKey();
}
static int sum = 0;
static int RangeSumBST(TreeNode root, int L, int R)
{
if (root == null)
{
return sum;
}
if (L<=root.val&& root.val<=R)
{
sum += root.val;
RangeSumBST(root.left, L, R);
RangeSumBST(root.right, L, R);
}
else if(root.val<L)
{
RangeSumBST(root.right, L, R);
}
else if (root.val>R)
{
RangeSumBST(root.left, L, R);
}
return sum;
}
}
class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) { val = x; }
}