给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。
示例 1:
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32
示例 2:
输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23
�
二叉搜索树的中序遍历结果是一个升序的有序序列,只要在有序序列中取 [low, high] 之间的值进行求和即可
public int rangeSumBST(TreeNode root, int low, int high) {
List<Integer> valList = new ArrayList<>();
inOrder(root,valList);
int sum = 0;
for (Integer val : valList) {
if (val >= low && val <= high) {
sum += val;
}
}
return sum;
}
/**
* 二叉搜索树的中序遍历结果是个有序数组
*
* @param node
* @param valList
*/
private void inOrder(TreeNode node, List<Integer> valList) {
if (node == null) {
return;
}
inOrder(node.left, valList);
valList.add(node.val);
inOrder(node.right, valList);
}