题目描述
输入一棵树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
解题思路
可以结合二叉树的深度的题目来看,简单的做法可以用递归实现,但是时间复杂度会比较高,因为会重复计算。
java代码实现
class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
TreeNode(int val) { this.val = val;}
}
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int nLeft = TreeDepth(root.left);
int nRight = TreeDepth(root.right);
int diff = nLeft - nRight;
if(diff > 1 || diff < -1) return false;
return true;
}
//计算树的深度
public int TreeDepth(TreeNode root)
{
if(root == null) return 0;
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
return (left > right)? left + 1 : right + 1;
}
}