题目描述
题目分析
首先是平衡二叉树的定义,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。先浮现在脑海中的是分别获取左右子树的深度,再对他们的差值进行比较。并且,每一个子树也必须是平衡的,因此也需要递归去判断他们。
当然最先是特殊情况的处理,当树为空树时,它就是平衡的。而在每一个递归中,也需要判断是否为空。
这个算法分成了两个方法,一个是判断树是否平衡的方法isBalance(),另一个是获取树的深度getDepth()
题目解答
/**
* 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) {
if(root==null) return true;
return Math.abs(getDepth(root.left)-getDepth(root.right))<=1&&isBalanced(root.left)&&isBalanced(root.right);
}
public int getDepth(TreeNode root){
if(root==null) return 0;
int left=0,right=0;
left=getDepth(root.left);
right=getDepth(root.right);
return left>right?left+1:right+1;
}
}