lintcode二叉查找树中搜索区间 java

来源:互联网 发布:陕西师范网络教育首页 编辑:程序博客网 时间:2024/06/15 23:00

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

样例

如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22].

    20   /  \  8   22 / \4   12
/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */public class Solution {    /*     * @param root: param root: The root of the binary search tree     * @param k1: An integer     * @param k2: An integer     * @return: return: Return all keys that k1<=key<=k2 in ascending order     */    public List<Integer> searchRange(TreeNode root, int k1, int k2) {        if(root == null){            return null;        }        List<Integer> list = new ArrayList<Integer>();        if(root.val <=k2 && root.val >= k1){            List<Integer> retLeft = searchRange(root.left, k1, k2);            if(null != retLeft){                list.addAll(retLeft);            }            list.add(root.val);            List<Integer> retRight = searchRange(root.right, k1, k2);            if(null != retRight){                list.addAll(retRight);            }        }else if(root.val > k2){            List<Integer> retLeft = searchRange(root.left, k1, k2);            if(null != retLeft){                list.addAll(retLeft);            }        }else if(root.val < k1){            List<Integer> retRight = searchRange(root.right, k1, k2);            if(null != retRight){                list.addAll(retRight);            }        }        return list;    }}


原创粉丝点击