• 如何判断二叉树是否对称?


    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

     

    class Node():
        def __init__(self,val):
            self.val = val
            self.lchild = None
            self.rchild = None
    
        
    class Tree():
        def __init__(self,root):
            self.root = root
        
        def add(self,item):
            node = Node(item)
            if not self.root:
                self.root = node
                return
            else:
                quene = [self.root]
                while quene:
                    cur_node = quene.pop(0)
                    if not cur_node.lchild:
                        cur_node.lchild = node
                        return
                    else:
                        quene.append(cur_node.lchild)
                        
                    if not cur_node.rchild:
                        cur_node.rchild = node
                        print(222222,node.val)
                        return
                    else:
                        quene.append(cur_node.rchild)                  
        
        
    #     def seek(self):
    #         if not root:
    #             return
    
                     
    #         #方法1:广度遍历
    #         llist = [self.root.lchild]
    #         rlist = [self.root.rchild] 
            
    #         lquene = [self.root.lchild]        
    #         rquene = [self.root.rchild] 
    #         print(rquene)
    # #         广度遍历左子树
    #         while lquene:
    #             cur_node = lquene.pop(0)
    #             if cur_node.lchild:
    #                 lquene.append(cur_node.lchild)
    #                 llist.append(cur_node.lchild)
    #             if cur_node.rchild:
    #                 lquene.append(cur_node.rchild)
    #                 llist.append(cur_node.rchild)
                    
    #         #广度遍历右子树  
    #         while rquene:
    #             cur_node = rquene.pop(0)
    #             if cur_node.lchild:
    #                 rquene.append(cur_node.lchild)
    #                 llist.append(cur_node.lchild)
                    
    #             if cur_node.rchild:
    #                 rquene.append(cur_node.rchild)
    #                 rlist.append(cur_node.rchild)
                    
    #         n1 = len(llist)
    #         n2 = len(rlist)
    #         l1 = [i.val for i in llist]
    #         l2 = [i.val for i in rlist]
    #         print(l1,l2)
                
    #         if n1 != n2:
    #             return False
    #         for i in range(n1):
    #             if llist[i].val != rlist[i].val:
                    
    #                 return False
    #         return True
        
    #         
        
        #方法二:深度遍历
        #深度遍历(先序)
        
        def seek(self):
            if not self.root:
                return
            def deep_xian(root,a):
                if root==None:
                    return
                else:
                    a.append(root)
                    deep_xian(root.lchild,a)
                    deep_xian(root.rchild,a)
                     
            llist = []
            rlist = []
    
            deep_xian(root.lchild,llist)
            deep_xian(root.rchild,rlist)
            
            n1 = len(llist)
            n2 = len(rlist)
            
            l1 = [i.val for i in llist]
            l2 = [i.val for i in rlist]
            print(l1,l2)
            if n1 != n2:
                return False
    
            for i in range(n1):
                if llist[i].val != rlist[i].val:
                    return False
            return True
        
                
    # 测试
    root = Node(1)
    etree = Tree(root)
    
    
    
    
    etree.add(2)
    etree.add(3)
    etree.add(4)
    
    etree.add(5)
    etree.add(6)
    etree.add(7)
    etree.add(8)
    etree.add(9)
    etree.add(10)
    print(etree.seek())
  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/hude/p/12983651.html
Copyright © 2020-2023  润新知