Junhc

岂止于博客

LeetCode之平衡二叉树

110. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

  3
 / \
9  20
  /  \
 15   7

返回 true
示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

      1
     / \
    2   2
   / \
  3   3
 / \
4   4

返回 false
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
private boolean ans;
public boolean isBalanced(TreeNode root) {
   if (root == null) return true;
   ans = true;
   height(root);
   return ans;
}

private int height(TreeNode x) {
   if (x == null) return 0;
   int l = height(x.left);
   if (!ans) return -1;
   int r = height(x.right);
   if (!ans) return -1;
   if (Math.abs(l - r) > 1) {
       ans = false;
       return -1;
   }
   return Math.max(l, r) + 1;
}