二叉树总结:入口
二叉树的基本操作:
5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树
7、把BST树满足[begin,end]区间的值放在集合中、打印出来
把BST树满足[begin,end]区间的值打印出来,放在list集合中。
因为中序遍历是左中右结构,符合数值从小到大的原则,所以只需要将树按中序遍历的方式遍历一遍,然后在遍历的同时比较大小即可。
/**
* 把BST树中满足[begin, end]区间的元素打印出来
*/
public void findAreaDatas(T begin, T end){
findAreaDatas(this.root, begin, end);
System.out.println();
}
private void findAreaDatas(BSTNode<T> root, T begin, T end) {
if(root == null){
return;
}
if(root.getData().compareTo(begin) > 0){ // 优化二叉树遍历
findAreaDatas(root.getLeft(), begin, end);
}
if(root.getData().compareTo(begin) >= 0
&& root.getData().compareTo(end) <= 0){
System.out.print(root.getData() + " ");
}
if(root.getData().compareTo(end) < 0){ // 优化二叉树遍历
findAreaDatas(root.getRight(), begin, end);
}
}
//求二叉树满足某一个区间[begin, end]的所有节点的值,放入list当中
public List<Integer> findAreaValue(int begin, int end){
List<Integer> list=new ArrayList<Integer>();
findValue(root,list,begin,end);
return list;
}
private void findValue(BSTNode root, List<Integer> list, int begin, int end) {
if(root!=null){
findValue(root.getLeft(),list,begin,end);
if(root.getData().compareTo(begin)>0 && root.getData().compareTo(end)<0){
list.add((Integer) root.getData());
}else if(root.getData().compareTo(end)>0){
return;
}
findValue(root.getRight(),list,begin,end);
}
}