LintCode 11.二叉查找树中搜索区间

定义:

二叉查找树:对于二叉查找树的任何一个节点,设这个节点的值为K,这个节点的左子树的任意一个节点的值都小于K,右子树的任何一个节点的值都大于等于K。

对于任何的二叉查找树,使用中序遍历(左根右),可以将值从小到大打印出来。

描述:

给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有 x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。

样例:

样例 1:

输入:
5
k1 = 6, k2 = 10
输出:
[]

样例 2:

输入:
        20
       /  \
      8   22
     / \
    4   12
k1 = 10, k2 = 22
输出:
[12,20,22]

 

代码: 

 

 public List<Integer> searchRange(TreeNode root, int k1, int k2) {
        // write your code here
        ArrayList<Integer> all=new ArrayList<>();
        
        inOrder(root,all);
        ArrayList<Integer> result=new ArrayList<>();
        for (int i=0;i<all.size();i++){
            int temp=all.get(i);
            if(temp>=k1&&temp<=k2){
                result.add(temp);
            }
        }
        return result;
    }
    
    public void inOrder(TreeNode root,List<Integer> list){
        if(root!=null){
            inOrder(root.left,list);
            list.add(root.val);
            inOrder(root.right,list);
        }
    }

补充说明:

先中序遍历,存储到 ArrayList all 中,之后遍历all,将符合条件的元素存入另一个ArrayList result中,返回 result 。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值