感觉这里需要遍历几乎所有的元素
我写的代码:
/**
* 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) {
int res= 0;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode cur;
if( root != null )queue.offer( root );
while( !queue.isEmpty() ){
cur = queue.poll();
int cur_v = cur.val;
if( cur_v <= L && cur.right != null )queue.offer(cur.right);
else if( cur_v >= R && cur.left != null)queue.offer(cur.left);
else {
if( cur.right != null )queue.offer(cur.right);
if(cur.left != null)queue.offer(cur.left);
}
if( cur_v >= L && cur_v <= R )res += cur_v;
}
return res;
}
}
再看看人家写的代码&思路:
/**
* 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) {
if( root == null )return 0;
if( root.val < L)return rangeSumBST(root.right, L, R);
if( root.val > R )return rangeSumBST( root.left, L, R );
return root.val + rangeSumBST(root.right, L, R) + rangeSumBST( root.left, L, R );
}
}