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的发展史
Sep 26 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
python的re正则表达式实例代码
Jan 24 Python
python简单实现操作Mysql数据库
Jan 29 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
python 发送json数据操作实例分析
Oct 15 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
python爬虫---requests库的用法详解
Sep 28 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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 中英文语言转换类代码
2011/08/11 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
javascript 精粹笔记
2010/05/09 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
js调用css属性写法
2013/09/21 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python的装饰器用法学习笔记
2016/06/24 Python
python3 爬取图片的实例代码
2018/11/06 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python多线程分块读取文件
2019/08/29 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Python3 assert断言实现原理解析
2020/03/02 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
python中xlrd模块的使用详解
2021/02/01 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
水污染治理专业毕业生推荐信
2013/11/14 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸