二叉搜索树的范围和。题意是给一个二叉搜索树和一个范围(L, R),请输出二叉搜索树里面所有node值介于L和R之间的node值的加和(sum)。例子,
Example 1:
Input: root = [10,5,15,3,7,null,18], L = 7, R = 15 Output: 32Example 2:
Input: root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10 Output: 23
两种做法,迭代和递归。时间和空间复杂度都是O(n)。
迭代 - 中序遍历
1 /**
2 * @param {TreeNode} root
3 * @param {number} L
4 * @param {number} R
5 * @return {number}
6 */
7 var rangeSumBST = function (root, L, R) {
8 var arr = [], sum = 0;
9 inorder(root, arr);
10 for (var i = 0; i < arr.length; i++) {
11 if (arr[i] >= L && arr[i] <= R) {
12 sum = sum + arr[i];
13 }
14 }
15 return sum;
16 };
17
18 var inorder = function (root, arr) {
19 if (root == null) {
20 return;
21 }
22 inorder(root.left, arr);
23 arr.push(root.val);
24 inorder(root.right, arr);
25 return;
26 }
递归
1 /**
2 * @param {TreeNode} root
3 * @param {number} L
4 * @param {number} R
5 * @return {number}
6 */
7 var rangeSumBST = function (root, L, R) {
8 // corner case
9 if (root === null) {
10 return 0;
11 }
12
13 // normal case
14 if (root.val > R) {
15 return rangeSumBST(root.left, L, R);
16 } else if (root.val < L) {
17 return rangeSumBST(root.right, L, R);
18 } else {
19 return root.val + rangeSumBST(root.left, L, R) + rangeSumBST(root.right, L, R);
20 }
21 };
来源:https://www.cnblogs.com/aaronliu1991/p/12242037.html