日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

對稱的二叉樹 python leetcode101

系統 1762 0

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

例如,二叉樹 [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

            
          

用遞歸和隊列實現

            
              
                #遞歸
              
              
                # Definition for a binary tree node.
              
              
                # class TreeNode:
              
              
                #     def __init__(self, x):
              
              
                #         self.val = x
              
              
                #         self.left = None
              
              
                #         self.right = None
              
              
                class
              
              
                Solution
              
              
                :
              
              
                def
              
              
                isSymmetric
              
              
                (
              
              self
              
                ,
              
               root
              
                :
              
               TreeNode
              
                )
              
              
                -
              
              
                >
              
              
                bool
              
              
                :
              
              
                if
              
              
                not
              
               root
              
                :
              
              
                # 先判斷根節點是否為空
              
              
                return
              
              
                True
              
              
                return
              
               self
              
                .
              
              isMirror
              
                (
              
              root
              
                .
              
              left
              
                ,
              
               root
              
                .
              
              right
              
                )
              
              
                # 分成左子樹和右子樹判斷
              
              
                def
              
              
                isMirror
              
              
                (
              
              self
              
                ,
              
               p
              
                ,
              
               q
              
                )
              
              
                :
              
              
                # 判斷兩棵樹是否是鏡像樹
              
              
                if
              
              
                not
              
               p 
              
                and
              
              
                not
              
               q
              
                :
              
              
                # 根節點都為空,是
              
              
                return
              
              
                True
              
              
                if
              
              
                not
              
               p 
              
                or
              
              
                not
              
               q
              
                :
              
              
                # 其中有一棵為空,不是
              
              
                return
              
              
                False
              
              
        l 
              
                =
              
               self
              
                .
              
              isMirror
              
                (
              
              p
              
                .
              
              left
              
                ,
              
               q
              
                .
              
              right
              
                )
              
              
                # p的左子樹和q的右子樹是否相同
              
              
        r 
              
                =
              
               self
              
                .
              
              isMirror
              
                (
              
              p
              
                .
              
              right
              
                ,
              
               q
              
                .
              
              left
              
                )
              
              
                # p的右子樹和q的左子樹是否相同
              
              
                return
              
               p
              
                .
              
              val 
              
                ==
              
               q
              
                .
              
              val 
              
                and
              
               l 
              
                and
              
               r            
              
                # 值相等,并且p的左=q的右,p的右=q的左
              
              
                # 方法二 隊列實現
              
              
                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
              
                :
              
              
                # 如果均為空,繼續下一個循環
              
              
                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
              
                )
              
              
                #node_queue.extend([left.left, right.right, left.right, right.left])   或者用這一句話寫
              
              
                return
              
              
                True
              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 贺兰县| 肃宁县| 土默特右旗| 虹口区| 桃园县| 山阴县| 大连市| 波密县| 同心县| 东乡县| 石楼县| 容城县| 彩票| 乐至县| 沁阳市| 临城县| 昭觉县| 阿拉善盟| 合山市| 大庆市| 遂宁市| 曲阳县| 桦南县| 花垣县| 新河县| 阿图什市| 定陶县| 龙陵县| 阿拉善左旗| 平潭县| 永川市| 宁南县| 翁源县| 五常市| 平和县| 伊金霍洛旗| 宣威市| 灵川县| 三门峡市| 荥阳市| 枣强县|