二叉树总结:入口
二叉树的基本操作:
5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树
7、把BST树满足[begin,end]区间的值放在集合中、打印出来
1、判断是否是BST树
从根节点开始递归遍历BST树并比较当前节点的左右子树的大小。
/**
* 判断一个二叉树是否是BST树,是BST返回true,否则返回false
*/
public boolean isBSTree(){
return isBSTree(this.root);
}
private boolean isBSTree(BSTNode<T> root) {
if(root == null){
return true;
}
if(root.getLeft()!=null && root.getLeft().getData().compareTo(root.getData())>0)
{
return false;
}
if(root.getRight()!=null&& root.getRight().getData().compareTo(root.getData())<0)
{
return false;
}
return isBSTree(root.getLeft()) && isBSTree(root.getRight());
}
2、判断一个BST树是否是AVL树
使用的方法就是从子节点向上测算当前节点的左子树和右子树的高度,一旦发现两者之差大于2,则返回-1。求法是使用递归,和计算树高度一样。
//判断是否是AVL树
public int isAVL(){
return isAVL(this.root);
}
private int isAVL(BSTNode<T> root){
if (root == null){
return 0;
}else {
int left = isAVL(root.getLeft());
int right = isAVL(root.getRight());
if (left == -1 || right == -1 || Math.abs(left - right) > 1) {
return -1;
}
return left > right ? left + 1 : right + 1;
}
}
下面的图可以帮助理解递归。