题目描述:
判断给定的二叉树是否是平衡的
在这个问题中,定义平衡二叉树为每个节点的左右两个子树高度差的绝对值不超过1的二叉树
平衡二叉树:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
解题思路:
主要方法是递归,平衡二叉树不仅左右两个子树的深度差不大于1,其左右子树也都是平衡二叉树。
判断以当前节点为根节点的树,其左右子树的深度差是否大于1
如果大于1,则证明不是平衡二叉树,直接返回false;
如果不大于1,则需要判断其左子树是否是平衡二叉树以及右子树是否是平衡二叉树(递归);
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
//返回二叉树的最大深度
public int maxnum(TreeNode root) {
if(root == null)
return 0;
return Math.max(maxnum(root.left),maxnum(root.right))+1;
}
public boolean isBalanced(TreeNode root) {
if(root == null)
return true;
//左右子树深度之差
int lr = Math.abs(maxnum(root.left)-maxnum(root.right));
//左右子树深度之差大于1就不是平衡树
if(lr <= 1){
return isBalanced(root.left)&&isBalanced(root.right);
}
else{
return false;
}
}
}