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 相关文章推荐
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
详解Python发送email的三种方式
Oct 18 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Apache部署Django项目图文详解
Jul 30 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
python 实现表情识别
Nov 21 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
JS中递归函数
2016/06/17 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python中使用动态变量名的方法
2014/05/06 Python
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
Python类型转换的魔术方法详解
2020/12/23 Python
服装厂厂长岗位职责
2013/12/27 职场文书
个人求职信范文分享
2014/01/31 职场文书
劳动实践课感言
2014/02/01 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
六一儿童节标语
2014/10/08 职场文书
大连星海广场导游词
2015/02/10 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL