定义:
二叉查找树:对于二叉查找树的任何一个节点,设这个节点的值为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 。