写在前面:
平衡二叉树(AVL树)首先是一个二叉搜索树,他的特点是:
(1)平衡二叉树可以是一颗空树或左右子树的高度差的绝对值
(2)他的左子树和右子树也都是平衡二叉树
代码实现:
boolean isBalanced = true;
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null) {
return true;
}
getDepth(root);
return isBalanced;
}
public int getDepth(TreeNode node) {
if (node == null) {
return 0;
}
int left = getDepth(node.left);
int right = getDepth(node.right);
// 判断子树是否为平衡树
int result = Math.abs(left - right);
if (result > 1) {
isBalanced = false;
}
// 树的高度取最高的子树的高度
return left < right ? right + 1 : left + 1;
}
总结:需要注意的是,平衡二叉树(AVL树)首先是一个二叉搜索树,但反之,二叉搜索树不一定是平衡二叉树。