1. 实验目的

理解树的存储结构,并掌握树的基本操作。

2. 实验介绍

了解树和森林的概念,包括树的定义、树的术语。掌握二叉树的概念、性质及二叉树的表示。熟练掌握二叉树的遍历算法,并且能灵活运用遍历算法实现二叉树的其他操作。掌握线索化二叉树的特性及寻找某结点的前驱和后继的方法。了解树的存储、树和森林与二叉树的转换方法。掌握哈夫曼树的实现方法、构造哈夫曼编码的方法及带权路径长度的计算。

3.实验内容

创建名为 ex050601_01.py 的文件,在文件中定义两个类,一个是树的结点类,该

类包含结点的相关信息(如结点的值和所有的子树);另一个是树的类,该类包含树的

定义及其基本操作。请按以下步骤测试树的基本操作的实现是否正确。

(1)初始化一个结点。

(2)以(1)中结点作为根结点,使用递归算法创建一棵图 5-1(主教材 P267 图 5-48)所示的树。

(3)对树执行先序遍历,并将先序序列输出。

(4)对树执行后序遍历,并将后序序列输出。

(5)对树执行层次遍历,并将所得序列输出。

(6)计算树的深度并输出。

(7)插入值为 G 的结点,使其是值为 D 的结点的第一个孩子结点。

4. 实验步骤与代码

class Node(object):def __init__(self):self.data ='#'self.pFirstChild = Noneself.pNextSibling = Noneclass Tree(object):def create(self,root):data = input('->')if data =='#':root = Noneelse:root.data = dataroot.pFirstChild = Node()self.create(root.pFirstChild)root.pNextSibling = Node()self.create(root.pNextSibling)def pre(self,root):if root != None:if root.data !='#':print(root.data,end=' ')self.pre(root.pFirstChild)self.pre(root.pNextSibling)def post(self,root):if root != None:self.post(root.pFirstChild)if root.data !='#':print(root.data,end=' ')self.post(root.pNextSibling)def travers(self,root):if root != None:if root.data !='#':print(root.data,end=' ')self.travers(root.pNextSibling)self.travers(root.pFirstChild)def deep(self,root):global maxdeepmaxdeep = 0while root != None:deepth = 0while root.data !='#':deepth += 1root = root.pFirstChildif deepth > maxdeep:maxdeep = deepthroot = root.pNextSiblingreturn maxdeepdef index(self,root):ip = input('要插入元素于什么之后:')while root != None:if root.data != '#':if root.data == ip:root.pFirstChild = Node()root = root.pFirstChild root.data = 'G'else:root = root.pFirstChildelse :    root = root.pNextSiblingif __name__=='__main__':n = Node()t = Tree()print('      A')print('    / | \\')print('    B C  D')print('    | |')print('    E F')print('需要按A B E # # C F # # D # # #顺序输入')t.create(n)print('对树进行前序遍历')t.pre(n)print()print('对树进行层次遍历')t.travers(n)print()print('对树进行后序遍历')t.post(n)print()print('树的深度为:',t.deep(n))t.index(n)print('对更新后的树进行层次遍历')
t.travers(n)

5.实验结果

数据结构与算法 实验5 树、二叉树和森林的基本操作相关推荐

  1. 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!

    『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...

  2. 数据结构与算法之2-3-4树

    数据结构与算法之2-3-4树 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ CSDN个人博客不定期转载 平衡树 [外链图片转存失败,源站可能有防盗链机制,建议将 ...

  3. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  4. 数据结构与算法实验题 4.2 Who is the strongest

    数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...

  5. 数据结构与算法实验题 6.1 鼹鼠掘土挑战赛

    数据结构与算法实验题 6..1 鼹鼠掘土挑战赛 ★实验任务 在潘多拉星的哈利路亚山上,生活着许多鼹鼠矿工,它们同属于潘多拉矿业公司哈利路 亚分公司.尽管在潘多拉星最美丽壮阔的地方工作,是一件十分让普通 ...

  6. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树

    树 树的基本概念 树是一种非线性的数据结构,样子如图所示: 树的主要特点是树中的数据是分层存储的,每个元素称为树的节点,最顶层有且只有一个元素,称为根节点,其余层可以有任意数量的节点.除了根节点,其余 ...

  7. 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树

    数据结构一直是让人头疼,面试遇到手撕算法题时真是慌得不行,从啥也不会刷题刷到游刃有余,路漫漫其修远兮~~.本人还是个算法菜鸟,而且还是想转行互联网的半吊子(好想拿大厂offer啊,幻想中..),希望能 ...

  8. 数据结构与算法学习笔记-树和二叉树

    声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定! 1.树和二叉树的定义 数 ...

  9. 【数据结构与算法基础】树与二叉树的互化

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

最新文章

  1. 离散数学中的联结符号
  2. matlab中的single是什么类型_MATLAB 中cell数据类型的使用方法
  3. jmeter 正则表达式
  4. uniapp添加顶部导航栏颜色渐变
  5. 为什么 Java 不支持运算符重载?
  6. codeforces 1060a(思维水题)
  7. Spring Boot(一)入门篇
  8. 判定是否过拟合、欠拟合的一种方式
  9. CS231n李飞飞计算机视觉 卷积神经网络详解上
  10. 南方cass简码识别大全_南方CASS简码成图的方法
  11. 5h是什么意思_企业管理5h是什么意思
  12. 【亚马逊运营技巧】如何查找高价值关键词?
  13. DM36X UBL UBoot
  14. 什么样的原因让男人聪明绝顶的
  15. RISC-CPU设计(一):基本概念
  16. 接招吧微软,谷歌大脑跟DeepMind团队合并了!
  17. react-native-art path代码解析
  18. 【Cheatsheet】收录英文邮件的写作技巧(比较系统、为后续邮件写作提供参考)
  19. 友声电子秤设置软件_友声电子秤操作方法盘点
  20. 精品基于Uniapp+SSM实现的Android的校园新闻管理系统实现的App

热门文章

  1. 信息安全密码技术--栅栏密码
  2. Golang: glog 的使用
  3. 计算机组成原理学习-实验一 运算器实验(详细、系统)
  4. ssm互联网金融 高级进阶 项目实战(完整)
  5. 如何用70行Java代码实现深度神经网络算法
  6. 《论文阅读笔记》Attention Bottlenecks for Multimodal Fusion
  7. 多线程中的公平锁和非公平锁
  8. c8815 android os,华为C8815刷机乐蛙OS 0827 4.1.2ROM93期
  9. 【收藏】eos是什么币?如何购买和储存eos币 —— 教科书式操作
  10. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知...