AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。
平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
如何判断一棵树是平衡二叉树?
最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private boolean flag = true;
public boolean is_Balance(TreeNode root) {
getDepth(root);
return flag;
}
public int getDepth(TreeNode root) {
if(root == null) return 0;
int left = getDepth(root.left);
int right = getDepth(root.right);
int temp = left - right;
// 判断左右子树的高度差
if(temp > 1 || temp < -1)
flag = false;
return left > right ? left + 1 : right + 1;
}
}