小白专场-树的同构-python语言实现

目录

  • 一、题意理解
  • 二、求解思路

更新、更全的《数据结构与算法》的更新网站,更有python、go、人工智能教学等着你:<https://www.cnblogs.com/nickchen121/p/11407287.html

一、题意理解

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构的”。现给定两棵树,请你判断它们是否是同构的。

输入格式:输入给出2棵二叉树的信息:

  • 先在一行中给出该树的结点树,随后N行
  • 第i行对应编号第i个结点,给出该结点中存储的字母、其左孩子结点的编号、右孩子结点的编号
  • 如果孩子结点为空,则在相应位置给出“-”

如下图所示,有多种表示的方式,我们列出以下两种:

二、求解思路

搜到一篇也是讲这个的,但是那篇并没有完全用到单向链表的方法,所以研究了一下,写了一个是完全用单向链表的方法:

其实应该有更优雅的删除整个单向列表的方法,比如头设为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()

原文地址:https://www.cnblogs.com/nickchen121/p/11518875.html

时间: 2024-10-29 18:35:35

小白专场-树的同构-python语言实现的相关文章

小白专场-树的同构-c语言实现.md

目录 一.题意理解 二.求解思路 2.1 二叉树表示 2.2 程序框架搭建 2.3 如何建二叉树 2.4 如何判别两二叉树同构 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html 一.题意理解 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构的".现给定两棵树,请你判断它们是否是同构的. 输入格式

小白专场-是否同一颗二叉搜索树-python语言实现

目录 一.二叉搜索树的相同判断 二.问题引入 三.举例分析 四.方法探讨 4.1 中序遍历 4.2 层序遍历 4.3 先序遍历 4.4 后序遍历 五.总结 六.代码实现 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html 一.二叉搜索树的相同判断 二叉搜索树是一种特殊的二叉树,在一定程度上是基于二分查找思想产生的,在它的任何一个节点node处,node的左子

03-树1 树的同构 (C语言链表实现)

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <stdbool.h> 5 6 typedef char ElemType; 7 8 typedef struct BinTree 9 { 10 ElemType data; 11 struct BinTree *left; 12 struct BinTree *right; 13 }BinTree; 14

Python语言及操作系统等《转》

转自:https://github.com/taizilongxu/interview_python Python语言特性 1 Python的函数参数传递 2 Python中的元类(metaclass) 3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典推导式 7 Python中单下划线和双下划线 8 字符串格式化:%和.format 9 迭代器和生成器 10 *args and **kwargs 11 面向切面编程AOP和装饰器 12

Python语言特性

Python语言特性 1 Python的函数参数传递 看两个例子: Python 1 2 3 4 5 a = 1 def fun(a): a = 2 fun(a) print a  # 1 Python 1 2 3 4 5 a = [] def fun(a): a.append(1) fun(a) print a  # [1] 所有的变量都可以理解是内存中一个对象的"引用",或者,也可以看似c中void*的感觉. 这里记住的是类型是属于对象的,而不是变量.而对象有两种,"可更

用python语言讲解数据结构与算法总述(一)

关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem Solving with Algorithms and Data Structures Using Python>,地址为:http://interactivepython.org/runestone/static/pythonds/index.html是英文的,写的不错,里面代码的实现也很详细,很多有趣的例子,于

数据结构与算法+Python语言描述pdf

下载地址:网盘下载 本书基于Python语言介绍了数据结构与算法的基本知识,主要内容包括抽象数据类型和Python面向对象程序设计.线性表.字符串.栈和队列.二叉树和树.集合.排序以及算法的基本知识.本书延续问题求解的思路,从解决问题的目标来组织教学内容,注重理论与实践的并用. 下载地址:网盘下载 原文地址:https://www.cnblogs.com/cf3276625841/p/9325994.html

Python语言学习笔记

获得人生中的成功需要的专注与坚持不懈多过天才与机会.  ——C.W. Wendte Python将很快成为你最喜欢的编程语言! Qt库?  PyQt  Perl-Qt 简单易学,功能强大,高效率的高层数据结构,简单而有效地实现面向对象编程. Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发. 注重的是如何解决问题而不是编程语言的语法和结构. wxPython,Twisted,Boa Constru

python语言学习1

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 龟叔给Python的定位是“优雅”.“明确”.“简单”,所以Python程序看上去总是简单易懂 初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序 python语言是一种很高级的语言 写代码的时候代码量很小,但是所带来的缺点就是运行速度慢 C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度.充分发挥硬件性