首页 > 其他 > 详细

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

时间:2020-05-28 22:23:15      阅读:64      评论:0      收藏:0      [点我收藏+]

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

class Node():
    def __init__(self,val):
        self.val = val
        self.lchild = None
        self.rchild = None
    def __str__(self):
        return self.val
    
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
                    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]
#         广度遍历左子树
        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)
                rlist.append(cur_node.rchild)
                
        #广度遍历右子树  
        while rquene:
            cur_node = rquene.pop(0)
            if cur_node.lchild:
                lquene.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)
        print(n1,n2)
        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)
#         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(1)
etree.add(2)
etree.add(2)
etree.add(2)
etree.add(2)
etree.add(2)

print(etree.seek())


 

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

原文:https://www.cnblogs.com/hude/p/12983651.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!