首页 > 编程语言 >Python数据结构实验 树和二叉树实验(二)

Python数据结构实验 树和二叉树实验(二)

时间:2024-03-28 19:00:13浏览次数:35  
标签:__ BTNode Python self bt 实验 二叉树 def

一、实验目的

1.掌握二叉树的概念和二叉树的性质;

2.掌握二叉树的存储结构,包括二叉树顺序存储结构和链式存储结构;

3.掌握二叉树的基本运算算法和二叉树的先序、中序和后序遍历的递归算法的实现。

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明 

1.实现二叉树的先序、中序和后序遍历的递归算法程序设计方法。   
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容

假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。二叉树bt的后序遍历序列为a1,a2,…,an,设计一个算法按an,an-1,…,a1的次序输出各结点值。

参考思路:

from collections import deque



class BTNode: #二叉链中结点类

def __init__(self,d=None):                  #构造方法

     ……

    

class BTree:                                                                #二叉树类

    def __init__(self,d=None):                  #构造方法

        ……



    def SetRoot(self,r):                                                 #设置根结点为r

        ……

    

   def DispBTree(self):             #返回二叉链的括号表示串

        ……

   

   def _DispBTree1(self,t):                          #被DispBTree方法调用

        …….



if __name__ == '__main__':

    b=BTNode('A')                          #建立各个结点

    p1=BTNode('B')

    ……

    b.lchild=p1              #建立结点之间的关系

    b.rchild=p2

    ……

    bt=BTree()

    bt.SetRoot(b)

    print("bt:",end=' '); print(bt.DispBTree())



from BTree import BTree,BTNode



def RePostOrder(bt): #求解算法

    _RePostOrder(bt.b)



def _RePostOrder(t):

    if _________:

        print(t.data+" ")

        _______________        

        _______________       





#主程序

b=BTNode('A')                                     #建立各个结点

p1=BTNode('B')

……

b.lchild=p1                                            #建立结点之间的关系

b.rchild=p2

……

bt=BTree()

bt.SetRoot(b)

print("bt:",end='  ');print(bt.DispBTree())

print("求解结果:")

_______________       



2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

from collections import deque



class BTNode:

    def __init__(self,d=None):     #构造方法

        self.data=d

        self.lchild=None

        self.rchild=None



class BTree:

    def __init__(self,d=None):     #构造方法

        self.root=d



    def SetRoot(self,r):           #设置根结点为r

        self.root=r



    def DispBTree(self):           #返回二叉链的括号表示串

        res=self._DispBTree1(self.root)

        return res[:-1]



    def _DispBTree1(self,t):       #被DispBTree1调用

        if t==None:

            return ''

        elif t.lchild==None and t.rchild==None:

            return str(t.data)+'^'

        else:

            return str(t.data)+'('+self._DispBTree1(t.lchild)+')('+self._DispBTree1(t.rchild)+')'



def RePostOrder(bt):               #求解算法

    print("后序遍历结果:", end="")

    _RePostOrder(bt.root)



def _RePostOrder(t):

    if t:

        _RePostOrder(t.lchild)

        _RePostOrder(t.rchild)

        print(t.data, end=" ")





if __name__ == '__main__':

    b=BTNode('A')

    p1=BTNode('B')

    p2=BTNode('C')

    p3=BTNode('D')

    p4=BTNode('E')

    p5=BTNode('F')



    b.lchild=p1

    b.rchild=p2

    p1.lchild=p3

    p1.rchild=p4

    p2.lchild=p5



    bt=BTree()

    bt.SetRoot(b)

    print("bt:",end='  ');print(bt.DispBTree())

    RePostOrder(bt)

标签:__,BTNode,Python,self,bt,实验,二叉树,def
From: https://blog.csdn.net/Jiangxia13/article/details/137020514

相关文章

  • 【课程设计/实训作品】python小区物业管理系统项目源码
    一直想做一款小区物业管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以评论。在线体验http://wuye.gitapp.cn/(账号:admin123密码:admin123)源码地址https://github.com/geeeeeeeek/python_wuye......
  • c语言程序实验——实验报告三
    c语言程序实验——实验报告三实验项目名称:实验报告3简单顺序程序设计实验项目类型:验证性实验日期:2024年3月28日一、实验目的1、学会准确使用c语言的数据输入与函数输出2、能编写简单顺序结构程序二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容:编写程序:(1......
  • 从字节码的角度看 python swap
    从字节码的角度看pythonswap背景从一道算法题开始:反转链表classListNode:def__init__(self,v)->None:self.val=vself.next=Nonedefadd_next(self,v):new_node=ListNode(v)self.next=new_noderetur......
  • 16,2024年Python大厂面试分享
    6.3.路由6.3.1.配置分布式路由在tedu_note/urls.py中,将所有user/***相关路由转交给user处理fromdjango.contribimportadminfromdjango.urlsimportpath,includeurlpatterns=[path(‘admin/’,admin.site.urls),path(‘user/’,include(‘user.urls’))......
  • MATLAB和Python交互的问题
    MATLAB和Python交互的一些坑:pythonsetup.pyinstall一定要在MATLAB安装文件夹setup.py的位置运行,使用绝对路径运行setup.py是不允许的,但是python可以用绝对路径参考D:\MATLAB\R2019b\extern\engines\python>D:\Python3.7\python.exe.\setup.pyinstall如果后续更换了MATLA......
  • 在Python中如何使用协程进行并发操作
    在Python中使用协程进行并发操作是一种高效的方式来处理I/O密集型任务或者在单个Python程序内部执行多个操作。本文将详细介绍如何在Python中使用协程进行并发操作,包括协程的基本概念、如何创建和运行协程、如何使用任务来管理多个协程,以及如何利用协程进行并发网络请求等。最......
  • 想学Python必看!!让你的Python学习之路事半功倍!!(超详细)
    前言在学习编程的路上,许多小伙伴脑子一热毫无规划就开始自学,结果不出一周,就从入门到入土,小编为大家整理了一份入门须知,看完事半功倍!本篇通过以下四块展开,提供大量资源对应。选一个好版本有没有看过《在下坂本,有何贵干?》那个版本可以装B,Python的版本则是你的工作环境。......
  • Python 字符串转为字典的两种常用方式(接口交互时)
    结论:在做接口时,请求、响应信息,必须要用json格式 原因:常规的字符串转为字典有两种方式,但两种方式都存在一定的问题:1、ast.literal_eval()(包含eval等类型方法)问题1:安全性,(literal_eval安全性好一些,eval不安全)问题2:需要将字符串中的 true false  null  =》 True......
  • python执行shell命令并输出日志
    使用npminstall时,由于npminstall控制台输出的构建信息是加载条,之前用的python脚本不能输出,且加载条完之后的输出也不能获取。因为需要使用新的脚本,使用下面的脚本python执行npminstall可以输出加载条之后的日志。process.poll()为返回码,正确运行返回码为0,若不为0则退出系统。w......
  • 代码随想录Day17 ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
     110.平衡二叉树 classSolution{public://返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1intgetHeight(TreeNode*node){if(node==NULL){return0;}intleftHeight=getHeight(node->left......