題目
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
思路
- 一棵二叉樹是否爲平衡二叉樹 = 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);
}