Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
这个问题是判断一个二叉树是否是平衡二叉树。平衡二叉树的定义是:对于其中的每个结点,它的左子树和右子树的高度差都不能大于1。a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Below is a representation of the tree input: {1,2,2,3,3,3,3,4,4,4,4,4,4,#,#,5,5}
:这棵树满足定义,是一个平衡二叉树。
____1____
/ \
2 2
/ \ / \
3 3 3 3
/\ /\ /\
4 4 4 4 4 4
/\
5 5
还算简单的一个问题。
boolean isBalanced=true;
public boolean isBalanced(TreeNode root) {
if(root==null){
return true;
}
helper(root);
return isBalanced;
}
//返回左右子树的高度
public int[] helper(TreeNode node){
if(node.left==null&&node.right==null){
return new int[]{0,0};
}
int left=0;
int right=0;
if(node.left!=null){
//左子树的高度等于 1+以左结点为根的左右子树的最大高度
int[] subLeft=helper(node.left);
left=1+Math.max(subLeft[0], subLeft[1]);
}
if(node.right!=null){
int[] subRight=helper(node.right);
right=1+Math.max(subRight[0], subRight[1]);
}
if(Math.abs(left-right)>1){
isBalanced=false;
}
return new int[]{left,right};
}
大神思路类似,但是解法更加简洁哦。
private static final int UNBALANCED = -99;
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
return getHeight(root) != UNBALANCED;
}
private int getHeight(TreeNode root) {
if (root == null) {
return -1;
}
int l = getHeight(root.left);
int r = getHeight(root.right);
if (l == UNBALANCED || r == UNBALANCED || Math.abs(l-r) > 1) {
return UNBALANCED;
}
return 1 + Math.max(l,r);
}