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 left and right subtrees of every node differ in height by no more than 1.
Example 1:
Given the following tree [3,9,20,null,null,15,7]:
3
/
9 20
/
15 7
Return true.
Example 2:
Given the following tree [1,2,2,3,3,null,null,4,4]:
1
/ \
2 2
/ \
3 3
/
4 4
Return false.
本题略有疑惑
难道不应该直接判断最长深度和最短深度然后如果高度差大于一则不平衡?
本题通过的解题思路为
给定一棵平衡二叉树,判断它是否是高度平衡的。一棵高度平衡的二叉树是左右子树的高度相差不超过1,对其左右子树也是如此
运用递归分治逐一判断
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
int left = depth(root.left); // 左子树深度
int right = depth(root.right); //右子树深度
if((left - right)> 1 || (left - right) < -1){ //如果左右子树相差大于一则不平衡
return false;
}
else{
return isBalanced( root.left) && isBalanced(root.right);// 判断左右子树是否是平衡树
}
}
private int depth(TreeNode n){
if(n == null){
return 0;
}
if(n.left == null && n.right == null){//如果都为左右都为空 深度为1
return 1;
}
else{
int left= depth(n.left);
int right = depth(n.right);
return 1+(left>right ?left:right);
}
}
}