[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(二叉搜索树的范围和)