剑指Offer(Java版)第四十四题:输入一棵二叉树,判断该二叉树是否是平衡二叉树。


/*
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
*/
//平衡二叉树(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

}

}

posted on 2020-03-19 11:18  桌子哥  阅读(133)  评论(0编辑  收藏  举报