101. 對稱二叉樹(Python)

更多題目移步【力扣簡單題】

題目

難度:★☆☆☆☆
類型:二叉樹

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

示例

例如颂碘,二叉樹 [1,2,2,3,4,4,3] 是對稱的椅挣。

     1
    /  \
   2    2
  / \  / \
 3  4  4  3

但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:

    1
   / \
  2   2
    \   \
    3    3

說明:

如果你可以運用遞歸和迭代兩種方法解決這個問題,會很加分峡竣。

解答

這道題和【100.相同的樹】很類似量九,我們可以使用遞歸和隊列兩種方式實現(xiàn)颂碧。

方案1:遞歸

對稱的樹的左子樹和右子樹滿足以下條件:

  1. 如果左子樹或右子樹均為空载城,則該樹對稱戚宦;

  2. 如果左子樹或右子樹只有一個為空,則該樹不對稱垦搬;

  3. 如果左子樹和右子樹均不為空艳汽,當左子樹的左子樹和右子樹的右子樹鏡像對稱,且左子樹的右子樹和右子樹的左子樹鏡像對稱時米绕,該樹對稱馋艺。

class Solution:
    def isSymmetric(self, root):
        """
        遞歸
        :param root:
        :return:
        """
        def is_mirror(p, q):         # 判斷左右子樹是否鏡像對稱
            if not p and not q:
                return True
            elif not p and q or p and not q:
                return False
            else:
                return p.val == q.val and is_mirror(p.left, q.right) and is_mirror(p.right, q.left)

        return is_mirror(root, root)

方案2:隊列

  1. 對根節(jié)點進行非空判斷捐祠,將根節(jié)點的左右子樹放在一個隊列中;

  2. 每次成對取出節(jié)點窿给,這兩個節(jié)點其實是二叉樹的對稱位置率拒,判斷這兩個節(jié)點的相等情況:
    (1)如果兩結點均為空,則繼續(xù)下一輪循環(huán)角撞;
    (2)如果兩結點只有一個是空勃痴,直接返回Fasle;
    (3)如果兩結點都不為空百炬,且它們的數(shù)值不同污它,也直接返回False;
    (4)此時兩結點的數(shù)值一定相等德澈,將它們的左右子結點逆序加入到隊列中固惯,保證每一對結點都是對稱的位置。

  3. 如果到最后镇辉,隊列中為空贴捡,則二叉樹對稱,返回True屹逛。

class Solution:
    def isSymmetric(self, root):
        """
        隊列
        :param root:
        :return:
        """

        if not root:
            return True

        node_queue = [root.left, root.right]    # 在空隊列中加入左子樹和右子樹

        while node_queue:
            left = node_queue.pop(0)            # 依次彈出兩個元素
            right = node_queue.pop(0)

            if not right and not left:          # 如果均為空汛骂,繼續(xù)下一個循環(huán)
                continue
            if not right or not left:           # 如果只有一個為空,返回False
                return False

            if left.val != right.val:           # 都非空淑掌,再判斷值是否相等
                return False

            node_queue.append(left.left)        # 將兩個左右子樹的左右子樹逆序加入隊列
            node_queue.append(right.right)
            node_queue.append(left.right)
            node_queue.append(right.left)

        return True

如有疑問或建議锋拖,歡迎評論區(qū)留言~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末祸轮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柄错,更是在濱河造成了極大的恐慌苦酱,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颂跨,死亡現(xiàn)場離奇詭異恒削,居然都是意外死亡,警方通過查閱死者的電腦和手機钓丰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門携丁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梦鉴,你說我怎么就攤上這事∮渴福” “怎么了快骗?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵方篮,是天一觀的道長。 經常有香客問我匕得,道長,這世上最難降的妖魔是什么汁掠? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任考阱,我火速辦了婚禮鞠苟,結果婚禮上,老公的妹妹穿的比我還像新娘吃既。我一直安慰自己跨细,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布震叙。 她就那樣靜靜地躺著,像睡著了一般捐友。 火紅的嫁衣襯著肌膚如雪匣砖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天猴鲫,我揣著相機與錄音谣殊,去河邊找鬼拂共。 笑死宜狐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蛇捌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俭驮,長吁一口氣:“原來是場噩夢啊……” “哼混萝!你這毒婦竟也來了?” 一聲冷哼從身側響起逸嘀,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤允粤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绳姨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阔挠,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年跪削,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碾盐。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡毫玖,死狀恐怖,靈堂內的尸體忽然破棺而出付枫,到底是詐尸還是另有隱情,我是刑警寧澤阐滩,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布掂榔,位于F島的核電站,受9級特大地震影響莲趣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜饱溢,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一绩郎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溉仑,春花似錦、人聲如沸浊竟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽后频。三九已至,卻和暖如春卑惜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背更米。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工毫痕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镇草。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓梯啤,卻偏偏與公主長得像因宇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子察滑,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容