输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
这道题和110. 平衡二叉树
一样。
/**
* 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) {
//如果返回的是-1,说明root中有某个左右子树的深度差大于1
return func(root, 1) == -1 ? false : true;
}
//depth:当前节点的深度
private int func(TreeNode root, int depth) {
//如果为0,深度减1
if (root == null) return depth - 1;
//获取左子树的最大深度
int leftDepth = func(root.left, depth + 1);
//如果等于-1,说明在左子树上,有某个左右子树深度差大于1,直接返回-1
if (leftDepth == -1) return -1;
//同上
int rightDepth = func(root.right, depth + 1);
if (rightDepth == -1) return -1;
//如果获取到了左子树和右子树的最大深度,比较深度差,如果大于1,返回-1,否则返回最大深度
return Math.abs(leftDepth - rightDepth) <= 1 ? Math.max(leftDepth, rightDepth) : -1;
}
}