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多线程下的变量问题
Apr 28 Python
八大排序算法的Python实现
Jan 28 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python实现日志按天分割
Jul 22 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
详解Python中namedtuple的使用
Apr 27 Python
Python 在局部变量域中执行代码
Aug 07 Python
举例讲解Python装饰器
Dec 24 Python
如何在Python中创建二叉树
Mar 30 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 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
PHP下常用正则表达式整理
2010/10/26 PHP
PHP运行模式的深入理解
2013/06/03 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
常用PHP框架功能对照表
2014/10/23 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python pandas库中的isnull()详解
2019/12/26 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
将相和教学反思
2014/02/04 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
装饰工程师岗位职责
2014/06/08 职场文书