问题描述:
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; } }