LeetCode,Go 實現對稱二叉樹的判別

力扣題目:

給定一個二叉樹,檢查它是否是鏡像對稱的。

解題思路

我們先思考下,樹對稱的條件是什麼?

  1. 對於樹的左子樹,和右子樹,它們的根節點肯定是相同的

  2. 每個樹的左子樹必須與另一個樹的右子樹鏡像對稱

  3. 每個樹的右子樹必須與另一個樹的左子樹鏡像對稱

這樣就形成了遞歸問題,對於兩個子樹,需要判斷子樹的子樹是否對稱。注意臨界點:如果所給根節點,爲空,那麼是對稱。

程序實現

func isSymmetric(root *TreeNode) bool {
    return isMirror(root, root)
}

func isMirror(t1 *TreeNode, t2 *TreeNode) bool {
    if t1 == nil && t2 == nil {
        return true
    }
    if t1 == nil || t2 == nil {
        return false
    }
    return t1.Val == t2.Val && isMirror(t1.Left, t2.Right) && isMirror(t1.Right, t2.Left) 
}

複雜度分析

假設樹上一共有 n 個節點。

時間複雜度:題目中我們遍歷了這棵樹,所以漸進時間複雜度爲 O(n)。 

空間複雜度:遞歸層數不超過 n,所以漸進空間複雜度爲 O(n)。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/rEtQpSzzW_ZZtfDkPbB_Qw