LeetCode 938
2020.8.14
我的通过代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
List<Integer> list = new ArrayList<Integer>();
traverse(root,list);
int sum = 0;
for(int i=0;i<list.size();i++) {
if(L<=list.get(i)&&list.get(i)<=R) {
sum+=list.get(i);
}
if(list.get(i)>R) break; /*大于最大值就不用再往后找了 */
}
return sum;
}
void traverse(TreeNode root, List<Integer> list) {
if(root==null) return ;
traverse(root.left,list);
list.add(root.val);
traverse(root.right,list);
}
}
这里我选择使用二叉搜索树的特性,进行中序遍历,这样得到的集合是一个有序的集合,我只需要对其中在[L,R]上的数字进行求和即可。
但是效率不太理想,执行时间14ms。
官方题解
官方解法使用了DFS,遍历整棵树,只要在[L,R]范围内的就加进去,效率高了很多,执行时间0ms。
代码如下:
class Solution {
int ans;
public int rangeSumBST(TreeNode root, int L, int R) {
ans = 0;
dfs(root, L, R);
return ans;
}
public void dfs(TreeNode node, int L, int R) {
if (node != null) {
if (L <= node.val && node.val <= R)
ans += node.val;
if (L < node.val)
dfs(node.left, L, R);
if (node.val < R)
dfs(node.right, L, R);
}
}
}
上述内容转自LeetCode
链接:https://leetcode-cn.com/problems/range-sum-of-bst/solution/er-cha-sou-suo-shu-de-fan-wei-he-by-leetcode/