题目要求:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路分析:
平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:
1,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1。
2,并且左右两个子树都是一棵平衡二叉树。
平衡二叉树的常用实现方法有:
最小二叉平衡树的节点总数的公式如下:
F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
先判断左子树深度,判断右子树深度,相差小于1则返回真,反则返回假。
代码实现:
class TreeNode{
TreeNode left;
TreeNode right;
int val;
public TreeNode(int val){
this.val = val;
}
}
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null){
return true;
}
int left = getDeep(root.left);
int right = getDeep(root.right);
int deep = left - right;
if(deep > 1 || deep < -1){
return false;
}
return true;
}
private int getDeep(TreeNode root){
if(root == null){
return 0;
}
int left = getDeep(root.left);
int right = getDeep(root.right);
if(left >= right){
return left+1;
}
return right+1;
}
}