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 03 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
python unittest实现api自动化测试
Apr 04 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
python 3.6.7实现端口扫描器
Sep 04 Python
PyTorch实现AlexNet示例
Jan 14 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python调用Windows命令打印文件
Feb 07 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
python opencv旋转图片的使用方法
Jun 04 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP运行模式汇总
2016/11/06 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
python字典key不能是可以是啥类型
2020/08/04 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
班组安全员工作职责
2014/02/01 职场文书
网络工程师职业规划
2014/02/10 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
安全目标责任书
2014/07/22 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang