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下如何查询CS反恐精英的服务器信息
Jan 17 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
python设定并获取socket超时时间的方法
Jan 12 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
Python实现密码薄文件读写操作
Dec 16 Python
python离线安装外部依赖包的实现
Feb 13 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
python的Jenkins接口调用方式
May 12 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
Python使用Kubernetes API访问集群
May 30 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
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
Python导入oracle数据的方法
2015/07/10 Python
Python制作简易注册登录系统
2016/12/15 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
一份全面的PHP面试问题考卷
2012/07/15 面试题
营销与策划个人求职信
2013/09/22 职场文书
车间主管岗位职责
2013/11/14 职场文书
部门年终奖分配方案
2014/05/07 职场文书
机电专业求职信
2014/06/14 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
电影雨中的树观后感
2015/06/15 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript