问题描述:
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 depth of the two subtrees of every node never differ by more than 1.
原问题链接:https://leetcode.com/problems/balanced-binary-tree/
问题分析
这个问题的关键在于要能够推导出判断平衡二叉树的递归关系。从它本身的定义来看,一棵树是否为平衡的,要看它当前的左右子树的高度差是否超过1。同时也要递归的去看它的两个子树也是否满足这个关系。所以这个问题又给归结到了求一棵树的高度上来了。而求树的高度的递归关系也很简单,就是递归的找它两个子树中最大的那个并加一。
所以,我们可以得到如下的实现代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
if(Math.abs(height(root.left) - height(root.right)) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
public int height(TreeNode root) {
if(root == null) return 0;
return Math.max(height(root.left), height(root.right)) + 1;
}
}