输入一棵二叉树的根节点,判断该树是不是平衡二叉树。
如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3 / \ 9 20 / \
15 7
返回 true
。
示例二:
3
/ \
9 20
/ \ / \
7 8 15
/ \
8
返回 false。
重点:任意节点!!
虽然看似左子树和右子树相差仅为1.,可是右子树中的左子树和右子树相差为2,大于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 l=maxDepth(root.left);
int r=maxDepth(root.right);
//相当于绝对值小于等于1|l-r|<=1
return l-r>=-1&&l-r<=1&&isBalanced(root.left)&&isBalanced(root.right);
}
public int maxDepth(TreeNode root) {
if(root==null) return 0;
//分别得到了左右孩子的深度
int l=maxDepth(root.left);
int r=maxDepth(root.right);
//return Math.max(l+1,r+1);
//因为每root.left和每root.right一下就降一层,层数要+1
if(l>r) return l+1;
return r+1;
}
}