题目:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
算法思想:
depth()方法是用来计算当前结点的深度,首先如果root是个空树,直接返回true,分别使用depth()计算出当前结点左子树和右子树的深度,如果他们深度差超过1,则进一步判断,反之,则直接返回false。
代码:
/**
* 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;
}
int treeLeft = depth(root.left);
int treeRight = depth(root.right);
if(Math.abs(treeLeft - treeRight) < 2) {
return isBalanced(root.left) && isBalanced(root.right);
} else {
return false;
}
}
public int depth(TreeNode root) {
if(root == null) {
return 0;
}
return Math.max(depth(root.left), depth(root.right)) + 1;
}
}