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 快速排序代码
Nov 23 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
python遍历小写英文字母的方法
Jan 02 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
解决Django Haystack全文检索为空的问题
May 19 Python
python3中for循环踩过的坑记录
Dec 14 Python
基于Python实现股票收益率分析
Apr 02 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
Zend公司全球首推PHP认证
2006/10/09 PHP
整合了前面的PHP数据库连接类~~做成一个分页类!
2006/11/25 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
python发送邮件接收邮件示例分享
2014/01/21 Python
python实现机器人卡牌
2019/10/06 Python
python十进制转二进制的详解
2020/02/07 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Python实现微信表情包炸群功能
2021/01/28 Python
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
AJAX都有哪些有点和缺点
2012/11/03 面试题
Python里面如何实现tuple和list的转换
2012/06/13 面试题
就业意向书
2014/07/29 职场文书
医德考评自我评价
2014/09/14 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
vue实现登陆页面开发实践
2022/05/30 Vue.js