zoukankan      html  css  js  c++  java
  • 153-101. 对称二叉树

    给定一个二叉树,检查它是否是镜像对称的。(随便看看吧,这个题真滴难-只有最后两个是对的前面的都不是对的)
    # Definition for a binary tree node.
    class TreeNode(object):
        def __init__(self, val=None, left=None, right=None):
            self.val = val
            self.left = left
            self.right = right
    
    
    class Solution(object):
        def isSymmetric1(self, root):
            """这个方法适合满二叉树,获取是空节点补TreeNode()的树
            :type root: TreeNode
            :rtype: bool
            """
            temp = root
            stack = list()
            temp_list = []   # 几率元素个数
            while temp or stack:
                while temp:
    
                    if not temp.right and temp.left:
                        temp.right = TreeNode(None)
                    if temp.right and not temp.left:
                        temp.left = TreeNode(None)
    
                    stack.append(temp)
                    temp = temp.left
    
                cur = stack.pop()
                temp_list.append(cur.val)
                temp = cur.right
    
            return temp_list == temp_list[::-1]
    
        def isSymmetric2(self, root):
            """这个方法适合满二叉树,获取是空节点补TreeNode()的树
            :type root: TreeNode
            :rtype: bool
            """
            return self.preSearch(root) == self.postSearch(root)
    
        def preSearch1(self, root):
            temp = root
            stack = list()
            temp_list = []   # 几率元素个数
            while temp or stack:
                while temp:
                    temp_list.append(temp.val)
                    stack.append(temp)
                    temp = temp.left
                cur = stack.pop()
                temp = cur.right
            return temp_list
    
        def postSearch1(self, root):
            temp = root
            stack = list()
            temp_list = []   # 几率元素个数
            while temp or stack:
                while temp:
                    temp_list.append(temp.val)
                    stack.append(temp)
                    temp = temp.right
                cur = stack.pop()
                temp = cur.left
            return temp_list
    
        def add_node(self, root):
            if not root.right and root.left:
                root.right = TreeNode()
    
            if not root.left and root.right:
                root.left = TreeNode()
    
            if root.left:
                self.add_node(root.left)
            if root.right:
                self.add_node(root.right)
    
        def preSearch(self, root):
            print(root.val)
            if root.left:
                self.preSearch(root.left)
    
            if root.right:
                self.preSearch(root.right)
    
        def midSearch(self, root):
            if root.left:
                self.midSearch(root.left)
    
            print(root.val)
    
            if root.right:
                self.midSearch(root.right)
    
        def postSearch(self, root):
            if root.left:
                self.postSearch(root.left)
    
            if root.right:
                self.postSearch(root.right)
    
            print(root.val)
    
        def isSymmetric3(self, root):
            """
            :type root: TreeNode
            :rtype: bool
            """
            return self.check(root, root)
    
        def check(self, left, right):
            if not left and not right:
                return True
            if not left or not right:
                return False
    
            return left.val == left.val and self.check(left.left, right.right) and self.check(left.right, right.left)
    
        def isSymmetric(self, root):
            """
            :type root: TreeNode
            :rtype: bool
            """
            queue = list()
            queue.append(root)
            queue.append(root)
            while queue:
                left = queue.pop()
                right = queue.pop()
    
                if not left and not right:
                    continue
    
                if (not left or not right) or (left.val != right.val):
                    return False
    
                queue.append(left.left)
                queue.append(right.right)
    
                queue.append(left.right)
                queue.append(right.left)
    
            return True
    
    
    if __name__ == '__main__':
        root = TreeNode(1)
    
        n1 = TreeNode(2)
        n2 = TreeNode(2)
    
        n3 = TreeNode(3)
        # n4 = TreeNode(4)
    
        n5 = TreeNode(3)
        # n6 = TreeNode(4)
    
        n1.left = n3
        # n1.right = n4
    
        n2.left = n5
        # n2.right = n6
    
        root.left = n1
        root.right = n2
    
        s1 = Solution()
        print(s1.isSymmetric(root))
    
  • 相关阅读:
    506. 相对排名 Relative Ranks
    500. 单词是否在键盘上的同一行 Keyboard Row
    openstack live migration性能分析
    libvirt/qemu特性之numa
    nova Scheduling 配置
    Specify compute hosts with SSDs
    nova conductor
    osprofiler
    watcher
    stacktach和ceilometer
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/14313317.html
Copyright © 2011-2022 走看看