二叉平衡树(判断一棵二叉树是否是平衡二叉树)
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
判断子树是否平衡+求左右子树高度
public class Solution {
// 如果从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;
// 如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) {
return true;
}
if(highOfTree(root) == -1) {
return false;
}
return true;
}
//如果当前树不平衡,返回-1,否则返回树的高度
public int highOfTree(TreeNode root) {
//判断根节点是否为空,如果为null,是平衡二叉树
if(root == null) {
return 0;
}
int l = highOfTree(root.left);
//判断左子树是否平衡,-1为不平衡
if(l == -1) {
return -1;
}
int r = highOfTree(root.right);
//判断右子树是否平衡,-1为不平衡
if(r == -1) {
return -1;
}
//判断当前二叉树是否平衡,-1为不平衡,否则返回树的高度
return Math.abs(l - r) > 1 ? -1 : Math.max(l,r) + 1;
}
}