二叉树总结:入口
二叉树的基本操作:
5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树
7、把BST树满足[begin,end]区间的值放在集合中、打印出来
判断是否是子树
思路就是先找到根节点,然后从根节点开始像下依次比较子树大小是否相等。
//判断形参bst树,是不是当前BST树(this)的一颗子树结构
public boolean IsChildTree(BSTree<T> bst){
boolean res=false;
//当Tree1和Tree2都不为null的时候才可以比较
if(this!=null && bst!=null) {
//如果找到了对应的Tree2的根节点的点
if (this.root.getData() == bst.root.getData()) {
res=HaveTree(this.root,bst.root);
}
//如果未找到,则以根节点的左孩子为起点,去判断是否包含Tree2
if(!res){
res=HaveTree(this.root.getLeft(),bst.root);
}
//如果未找到,则以根节点的右孩子为起点,去判断是否包含Tree2
if(!res){
res=HaveTree(this.root.getRight(),bst.root);
}
}
return res;
}
private boolean HaveTree(BSTNode root1, BSTNode root2) {
//root2遍历完了 全部匹配
if(root2==null){
return true;
}else if(root1==null){ //root1先遍历完了 root2中存在在root1没有的结点;
return false;
}
if(root1==null && root2==null){ //两棵树的结点一直相等,直到结点遍历完了
return true;
}
if(root1.getData()!=root2.getData()){
return false;
}
//如果根节点对应的上,那么就分别去子节点里面匹配
return HaveTree(root1.getLeft(), root2.getLeft())&& HaveTree(root1.getRight(), root2.getRight());
}