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和shell获取文本内容的方法
Jun 05 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
python实现月食效果实例代码
Jun 18 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
Python sep参数使用方法详解
Feb 12 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
Python实现疫情地图可视化
Feb 05 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 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概述.
2006/10/09 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
python ubplot使用方法解析
2020/01/10 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
控制工程专业个人求职信
2013/09/25 职场文书
大专毕业生自我鉴定
2013/11/21 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
交通事故被告答辩状
2015/05/22 职场文书