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的collections模块中defaultdict类型的用法
Jul 07 Python
Python进行数据提取的方法总结
Aug 22 Python
python中的闭包函数
Feb 09 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
通过Python实现一个简单的html页面
May 16 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
Django使用channels + websocket打造在线聊天室
May 20 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
php实现mysql同步的实现方法
2009/10/21 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
实例讲解php实现多线程
2019/01/27 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
python获取当前计算机cpu数量的方法
2015/04/18 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
如何理解委托
2012/01/06 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
关于打架的检讨书
2014/01/17 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
领导欢迎词致辞
2015/01/23 职场文书
司机个人年终总结
2015/03/03 职场文书