第一次完完全全靠自己写出来的啊,虽然提交代码效率很差,但也值得纪念一下哈哈
思路:先序遍历拿到所有的二叉树的值存放在list,然后再遍历list得到满足题目得数
class Solution {
public int rangeSumBST(TreeNode root, int low, int high) {
List<Integer> list=new ArrayList<>();
List<Integer> result=new ArrayList<>();
int sum=0;
pre(root,list);
for(int i=0;i<list.size();i++){
if(list.get(i)>=low&&list.get(i)<=high){
result.add(list.get(i));
}
}
for(int i=0;i<result.size();i++){
sum+=result.get(i);
}
return sum;
}
private void pre(TreeNode root, List<Integer> ret){
if(root==null) return;
ret.add(root.val);
pre(root.left,ret);
pre(root.right,ret);
}
}
看看网上的满分答案
首先我忘记了很重要的一点:二叉树的右子树的值都比左子树的值要大
public int rangeSumBST(TreeNode root, int L, int R) {
if(root == null) return 0;
if(root.val > R) return rangeSumBST(root.left, L, R);
if(root.val < L) return rangeSumBST(root.right, L, R);
return root.val + rangeSumBST(root.left, L, R) + rangeSumBST(root.right, L, R);
}