码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 938. Range Sum of BST

时间:2020-01-30 10:09:53      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:ram   迭代   strong   range   题意   block   搜索   sum   ase   

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

标签:ram   迭代   strong   range   题意   block   搜索   sum   ase   

原文地址:https://www.cnblogs.com/aaronliu1991/p/12242037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!