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中遍历文件的3个方法
Sep 02 Python
python字符串连接的N种方式总结
Sep 17 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
python实现简单socket通信的方法
Apr 19 Python
Python的面向对象编程方式学习笔记
Jul 12 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Python-jenkins模块获取jobs的执行状态操作
May 12 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
python中turtle库的简单使用教程
Nov 11 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP无敌近乎加密方式!
2010/07/17 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
详解vue添加删除元素的方法
2018/06/30 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
Python命令行解析模块详解
2018/02/01 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
python能开发游戏吗
2020/06/11 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
给小学生的新年寄语
2014/04/04 职场文书
节约粮食标语
2014/06/18 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书