题目
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
- 一棵二叉树是否为平衡二叉树 = Math.abs(左子树的深度 - 右子树的深度) <= 1
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null)
return true;
int leftDepth = depth(root.left);
int rightDepth = depth(root.right);
return Math.abs(leftDepth - rightDepth) <= 1;
}
private int depth(TreeNode root) {
if (root == null) return 0;
return 1 + Math.max(depth(root.left), depth(root.right));
}
优化
- 如果某个子树不是平衡二叉树,那么该树就不是平衡二叉树
- 利用成员变量记录当前子树是否为平衡二叉树,如果不为,直接返回。
private boolean isBalanced = true;
public boolean IsBalanced_Solution(TreeNode root) {
depth(root);
return isBalanced;
}
private int depth(TreeNode root) {
if (root == null || !isBalanced)
return 0;
int leftDepth = depth(root.left);
int rightDepth = depth(root.right);
isBalanced = Math.abs(leftDepth - rightDepth) <= 1;
return 1 + Math.max(leftDepth, rightDepth);
}