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可跨平台实现获取按键的方法
Mar 05 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
python opencv 图像尺寸变换方法
Apr 02 Python
PyQt5每天必学之布局管理
Apr 19 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
基于python 取余问题(%)详解
Jun 03 Python
python如何代码集体右移
Jul 20 Python
python实现移动木板小游戏
Oct 09 Python
使用python实现学生信息管理系统
Feb 25 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python设置值及NaN值处理方法
2018/07/03 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
现场施工员岗位职责
2014/03/10 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
银行先进个人总结
2015/02/15 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
吴仁宝观后感
2015/06/09 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
vue+spring boot实现校验码功能
2021/05/27 Vue.js