[LeetCode] 938. Range Sum of BST

徘徊边缘 提交于 2020-01-30 03:59:56

二叉搜索树的范围和。题意是给一个二叉搜索树和一个范围(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)。

迭代 - 中序遍历

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!