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 13 Python
Python实现二分查找算法实例
May 26 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
谈谈python垃圾回收机制
Sep 27 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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防注入代码
2010/04/07 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
ext 代码生成器
2009/08/07 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
Python创建日历实例
2014/08/21 Python
Python程序运行原理图文解析
2018/02/10 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
python绘图模块之利用turtle画图
2021/02/12 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
行政办公室岗位职责
2014/03/18 职场文书
个人自荐材料
2014/05/23 职场文书
科学发展观演讲稿
2014/09/11 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
小学新教师个人总结
2015/02/05 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL