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 04 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
详解python里的命名规范
Jul 16 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
Python代码中如何读取键盘录入的值
May 27 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
python实现双人五子棋(终端版)
Dec 30 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
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
详解python 注释、变量、类型
2018/08/10 Python
Python中is和==的区别详解
2018/11/15 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python验证码截取识别代码实例
2020/05/16 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
三星法国官方网站:Samsung法国
2019/10/31 全球购物
C#面试题
2016/05/06 面试题
美术教师岗位职责
2014/03/18 职场文书
个人综合鉴定材料
2014/05/23 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
大明湖导游词
2015/02/03 职场文书
个人欠条范本
2015/07/03 职场文书