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的迭代器与生成器实例详解
Jul 16 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
python操作redis的方法
Jul 07 Python
python中range()与xrange()用法分析
Sep 21 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
Python入门之基础语法详解
May 11 Python
python异常中else的实例用法
Jun 15 Python
Python torch.flatten()函数案例详解
Aug 30 Python
python获取带有返回值的多线程
May 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调用Java对象的方法
2006/10/09 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
php实现算术验证码功能
2018/12/05 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
Angularjs的键盘事件的绑定
2017/07/27 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python实现在线音乐播放器
2017/03/03 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
农村党支部承诺书
2015/04/30 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
python小型的音频操作库mp3Play
2022/04/24 Python