python树的同构学习笔记

  

<强>一、题意理解

  

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构的”。现给定两棵树,请你判断它们是否是同构的。

  

 python树的同构学习笔记

  

输入格式:输入给出2棵二叉树的信息:

  

先在一行中给出该树的结点树,随后N行

  

第我行对应编号第i个结点,给出该结点中存储的字母,其左孩子结点的编号,右孩子结点的编号

  

如果孩子结点为空,则在相应位置给出”——“

  

如下图所示,有多种表示的方式,我们列出以下两种:

  

 python树的同构学习笔记

  

 python树的同构学习笔记

  

<强>二,求解思路

  

搜到一篇也是讲这个的,但是那篇并没有完全用到单向链表的方法,所以研究了一下,写了一个是完全用单向链表的方法:

  

其实应该有更优雅的删除整个单向列表的方法,比如头设为none,可能会改进下?

        # python语言实现      L1=列表(地图(int、输入().split ()))   L2=列表(地图(int、输入().split ()))         #节点   类节点:   def __init__(自我,系数经验值):   自我。系数=系数   自我。经验=经验   自我。下一个=没有         #单链表   类列表:   def __init__(自我,节点=None):   自我。__head=节点      #为了访问私有类   def gethead(自我):   返回self.__head      def旅行(自我):   cur1=self.__head   cur2=self.__head   如果cur1。下一个!=没有:   cur1=cur1.next   其他:   打印(cur2。系数,cur2。实验结束=" ")   返回   而cur1。下一个!=没有:   打印(cur2。系数,cur2。实验结束=" ")   cur1=cur1.next   cur2=cur2.next      打印(cur2。系数,cur2。实验结束=" ")   cur2=cur2.next   打印(cur2。系数,cur2。实验结束=" ")      #添加物品的尾巴   def append(自我,系数经验值):   节点=节点(系数经验值)   如果自我。__head==没有:   自我。__head=节点   其他:   坏蛋=self.__head   虽然cur.next !=没有:   坏蛋=cur.next   cur.next=节点         def addl (l1, l2):   p1=l1.gethead ()   p2=l2.gethead ()   l3=列表()   虽然(p1不是没有),(p2不是没有):   如果(p1。经验比;p2.exp):   l3.append (p1。系数,p1.exp)   p1=p1.next   elif (p1。exp & lt;p2.exp):   l3.append (p2。系数,p2.exp)   p2=p2.next   其他:   如果(p1。系数+ p2。系数==0):   p1=p1.next   p2=p2.next   其他:   l3.append (p2。系数+ p1。系数,p1.exp)   p2=p2.next   p1=p1.next   虽然p1不是没有:   l3.append (p1。系数,p1.exp)   p1=p1.next   虽然p2不是没有:   l3.append (p2。系数,p2.exp)   p2=p2.next   如果l3.gethead()==没有:   l3。追加(0,0)   返回l3         def考虑(l1, l2):   p1=l1.gethead ()   p2=l2.gethead ()   l3=列表()   l4=列表()   如果(p1不是没有),(p2不是没有):   虽然p1不是没有:   虽然p2不是没有:   l4.append (p1。系数* p2。系数,p1。经验值+ p2.exp)   p2=p2.next   l3=addl (l3、l4)   l4=列表()   p2=l2.gethead ()   p1=p1.next   其他:   l3。追加(0,0)   返回l3         def (L):本项目   l=列表()   L.pop (0)   因为我在范围(0,len (L), 2):   l追加(L[我],L (i + 1))   返回l         l1=(l1)本项目   l2=(l2)本项目   l3=列表()   l3=考虑(l1, l2)   l3.travel ()   打印(" ")   l3=列表()   l3=addl (l1, l2)   l3.travel ()      之前      

以上就是本次介绍的全部内容知识点,相关内容可以参阅下方知识点,感谢大家对的支持。

python树的同构学习笔记