/*
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
*/
//平衡二叉树(Balanced Binary Tree),具有以下性质:
//它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,
//并且左右两个子树都是一棵平衡二叉树。
//最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,
//可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
public class Class44 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null){
return true;
}
if(findTreeHeight(root) != -1){ // 使用-1标志来进行剪枝
return true;
}
return false;
}
public int findTreeHeight(TreeNode root){
if(root == null){
return 0;
}
int leftTree = findTreeHeight(root.left);
if(leftTree == -1){
return -1;
}
int rightTree = findTreeHeight(root.right);
if(rightTree == -1){
return -1;
}
return Math.abs(leftTree - rightTree) > 1 ? -1 : Math.max(leftTree + 1, rightTree + 1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}