1.实验要求
实验目的:
掌握二叉树基本操作的实现方法。
了解哈夫曼树的思想和相关概念。
学习使用二叉树解决实际问题的能力。
实验要求:
1、二叉树的建立 2、前序遍历二叉树
3、中序遍历二叉树 4、后序遍历二叉树
5、按层序遍历二叉树 6、求二叉树的深度
7、求指定结点到根的路径
8、二叉树的销毁 9、其他:自定义操作
编写测试main()函数测试二叉树的正确性
2. 程序分析
2.1 存储结构
存储结构:二叉树,本质是二叉链表。
示意图:
每一个节点中,有数据域,指向左子树的指针,指向右子树的指针。
构造树:在有参构造函数BiTree中调用函数Create 目的是可以减少传入的参数,更加方便简洁。
过程:
1.建立根结点。
2.建立左子树。
3.建立右子树。
首先通过无参构造初始化根节点:
有参构造函数BiTree:
通过递归调用Create函数建立树:
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.按照从左到右的顺序依次遍历根结点的每一棵子树。
访问过程:
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.所