[LeetCode] 938. Range Sum of BST

Posted aaronliu1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 938. Range Sum of BST相关的知识,希望对你有一定的参考价值。

二叉搜索树的范围和。题意是给一个二叉搜索树和一个范围(L, R),请输出二叉搜索树里面所有node值介于L和R之间的node值的加和(sum)。例子,

Example 1:

Input: root = [10,5,15,3,7,null,18], L = 7, R = 15
Output: 32

Example 2:

Input: root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
Output: 23

两种做法,迭代和递归。时间和空间复杂度都是O(n)。

迭代 - 中序遍历。注意:对BST做中序遍历的结果是有序的。

 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 };

 

以上是关于[LeetCode] 938. Range Sum of BST的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode --- 938. Range Sum of BST 解题报告

[LeetCode] 938. Range Sum of BST

[LeetCode] 938. Range Sum of BST 二叉搜索树的区间和

Leetcode-938 Range Sum of BST(二叉搜索树的范围和)

LeetCode.938-范围内求二叉搜索树节点值之和(Range Sum of BST)

938. Range Sum of BST