python树的同构学习笔记


Posted in Python onSeptember 14, 2019

一、题意理解

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

python树的同构学习笔记

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

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

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

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

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

python树的同构学习笔记

python树的同构学习笔记

二、求解思路

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

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

# python语言实现

L1 = list(map(int, input().split()))
L2 = list(map(int, input().split()))


# 节点
class Node:
  def __init__(self, coef, exp):
    self.coef = coef
    self.exp = exp
    self.next = None


# 单链表
class List:
  def __init__(self, node=None):
    self.__head = node

  # 为了访问私有类
  def gethead(self):
    return self.__head

  def travel(self):
    cur1 = self.__head
    cur2 = self.__head
    if cur1.next != None:
      cur1 = cur1.next
    else:
      print(cur2.coef, cur2.exp, end="")
      return
    while cur1.next != None:
      print(cur2.coef, cur2.exp, end=" ")
      cur1 = cur1.next
      cur2 = cur2.next

    print(cur2.coef, cur2.exp, end=" ")
    cur2 = cur2.next
    print(cur2.coef, cur2.exp, end="")

  # add item in the tail
  def append(self, coef, exp):
    node = Node(coef, exp)
    if self.__head == None:
      self.__head = node
    else:
      cur = self.__head
      while cur.next != None:
        cur = cur.next
      cur.next = node


def addl(l1, l2):
  p1 = l1.gethead()
  p2 = l2.gethead()
  l3 = List()
  while (p1 is not None) & (p2 is not None):
    if (p1.exp > p2.exp):
      l3.append(p1.coef, p1.exp)
      p1 = p1.next
    elif (p1.exp < p2.exp):
      l3.append(p2.coef, p2.exp)
      p2 = p2.next
    else:
      if (p1.coef + p2.coef == 0):
        p1 = p1.next
        p2 = p2.next
      else:
        l3.append(p2.coef + p1.coef, p1.exp)
        p2 = p2.next
        p1 = p1.next
  while p1 is not None:
    l3.append(p1.coef, p1.exp)
    p1 = p1.next
  while p2 is not None:
    l3.append(p2.coef, p2.exp)
    p2 = p2.next
  if l3.gethead() == None:
    l3.append(0, 0)
  return l3


def mull(l1, l2):
  p1 = l1.gethead()
  p2 = l2.gethead()
  l3 = List()
  l4 = List()
  if (p1 is not None) & (p2 is not None):
    while p1 is not None:
      while p2 is not None:
        l4.append(p1.coef * p2.coef, p1.exp + p2.exp)
        p2 = p2.next
      l3 = addl(l3, l4)
      l4 = List()
      p2 = l2.gethead()
      p1 = p1.next
  else:
    l3.append(0, 0)
  return l3


def L2l(L):
  l = List()
  L.pop(0)
  for i in range(0, len(L), 2):
    l.append(L[i], L[i + 1])
  return l


l1 = L2l(L1)
l2 = L2l(L2)
l3 = List()
l3 = mull(l1, l2)
l3.travel()
print("")
l3 = List()
l3 = addl(l1, l2)
l3.travel()

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

Python 相关文章推荐
python支持断点续传的多线程下载示例
Jan 16 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
python 多线程串行和并行的实例
Feb 22 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
导致python中import错误的原因是什么
Jul 01 Python
python raise的基本使用
Sep 10 Python
python requests模块的使用示例
Apr 07 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 Python
python图形绘制奥运五环实例讲解
Sep 14 #Python
python列表插入append(), extend(), insert()用法详解
Sep 14 #Python
postman传递当前时间戳实例详解
Sep 14 #Python
Python 经典算法100及解析(小结)
Sep 13 #Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 #Python
Python函数中的可变长参数详解
Sep 12 #Python
python爬虫-模拟微博登录功能
Sep 12 #Python
You might like
终于听上了直流胆调频
2021/03/02 无线电
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
团组织关系介绍信
2014/01/12 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
男女朋友协议书
2014/04/23 职场文书
妇联主席先进事迹
2014/05/18 职场文书
煤矿安全保证书
2015/02/27 职场文书
检举信的写法
2019/04/10 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers