【劍指 Offer 題解】55.2 平衡二叉樹

題目

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

思路

  • 一棵二叉樹是否爲平衡二叉樹 = 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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章