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
一开始以为是最长路径和最短路径相减,不懂为啥直接是左右的最长路径相减了:没有最短。有长的子树就不用考虑短的了,所以是最长和最长的比较
然后还是用求二叉树最大长度的那个方法
有个奇葩的边界情况:左或者右节点为空时,长度返回-1
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isBalanced(TreeNode root) { //cc if (root == null) return true; return (helper(root) != -1); } public int helper(TreeNode root) { //cc if (root == null) return 0; int left = helper(root.left); int right = helper(root.right); if (left == -1 || right == -1 || Math.abs(left - right) > 1) return -1; return Math.max(left, right) + 1; } }