北京邮电大学22级信通 实验三 二叉树

本文详细介绍了二叉树的基本操作,包括建立、遍历(前序、中序、后序、层序)和求深度等,并探讨了哈夫曼树的相关概念。通过递归和循环实现各种遍历算法,分析了它们的时间和空间复杂度。此外,还讨论了二叉树的销毁、计算叶子节点个数和节点总数的方法,以及为什么不在构造和析构函数中直接完成树的构建与销毁。
摘要由CSDN通过智能技术生成

1.实验要求

 

实验目的:

掌握二叉树基本操作的实现方法。

了解哈夫曼树的思想和相关概念。

学习使用二叉树解决实际问题的能力。

实验要求:

1、二叉树的建立 2、前序遍历二叉树

3、中序遍历二叉树 4、后序遍历二叉树

5、按层序遍历二叉树 6、求二叉树的深度

7、求指定结点到根的路径

8、二叉树的销毁 9、其他:自定义操作

编写测试main()函数测试二叉树的正确性

 

 

 

 

 

2. 程序分析

2.1 存储结构

存储结构:二叉树,本质是二叉链表。

示意图:

3aceda44bf504304aab59d0d25816dfe.png

每一个节点中,有数据域,指向左子树的指针,指向右子树的指针。

 

ac3ed52b31234ef9b428d866a10d1ae7.png

 

构造树:在有参构造函数BiTree中调用函数Create 目的是可以减少传入的参数,更加方便简洁。

过程:

 1.建立根结点。

 2.建立左子树。

 3.建立右子树。

首先通过无参构造初始化根节点:2df3e69d0abd47d1b23b9584236dfc51.png

 

有参构造函数BiTree:

82d4427314de45fe822041297713ba01.png

通过递归调用Create函数建立树:

539ebe7f2872452ead33ac805bb0a683.png

 

 R是每次要建立的根节点的指针。

首先初始化R。

将数组data中的数据赋值给R,其中i是当前节点的编号。

左右子树置空。

递归调用create函数分别建立左右子树。

递归调用建立左子树的时候i=i*2、建立右子树的时候i=i*2+1是因为树具有以下性质:

对含n个结点的完全二叉树从上到下,从左至右进行1至n的编号,则任意一个编号为i的结点:

   1、如果2i>n,则结点无左孩子,否则其左孩子为2i。

   2、如果2i+1>n,则无右孩子,否则其右孩子为2i+1。

2.2 关键算法分析

1.前序遍历:

关键算法:

    1.访问根结点。

    2.按照从左到右的顺序依次遍历根结点的每一棵子树。

9d5d987313c6457d9d9bc01dc4dd64ea.png

 

访问过程:

1.首先访问根节点A

2.访问A的左子树B

3.访问B的左子树D

4.D没有左子树了,回溯到B,访问B的右子树E

5.访问E的左子树F

6.F没有左子树了,回溯到E,访问E的右子树,但是E没有右子树,回溯到B,这个时候B的左右子树都访问完了,回溯到A,访问A的右子树C

7.访问C的左子树G

8.访问G的左子树,但是左子树为空,回溯到G,访问G的右子树H

9.所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值