一、实验目的
掌握二叉树的定义、基本操作,综合应用所学的知识分析问题、解决问题,学会用建立二叉树并对其进行遍历,提高实际编程能力及程序调试能力。
二、实验要求
建立二叉树,并进行遍历(前序遍历、中序遍历、后序遍历)。
三、实验方法内容
- 算法设计思路
二叉树的非递归遍历是用显示栈来储存二叉树的节点指针,先序遍历时,按二叉树的前序遍历的顺序访问接点,并将结点指针入栈,直到栈顶指针指向结点的左指针域为空时取出栈顶指针并删除栈顶指针,访问刚取出的指针指向的结点的右指针指向结点并将其指针入栈,如此反复执行则为非递归操作。
二叉树的递归遍历:若二叉树为空,则空操作
先序遍历:
(a)访问根结点;
(b)先序遍历左子树;
(c)先序遍历右子树。
中序遍历:
(a)中序遍历左子树
(b) 访问根结点;
(c)中序遍历右子树。
后序遍历:
(a)后序遍历左子树
(b)后序遍历右子树
(c)访问根结点;
层次遍历:
从二叉树第一层(根节点)开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问。
- 算法中用到的数据结构
(1)void CreateBiTree 以二叉链表表示二叉树,建立一棵二叉树;
(2)void PreOrderTraverse 输出二叉树的前序遍历结果;
(3)void InOrderTraverse 输出二叉树的中序遍历结果;
(4)void PostOrderTraverse 输出二叉树的后序遍历结果;
(5)int LeafNodeCount 统计二叉树的叶结点个数;
(6)int Node Count 统计二叉树的结点个数;
(7)int Depth 计算二叉树的深度。
(8)int Swap 交换二叉树每个结点的左孩子和右孩子;
- 主要的常量变量
void CreateBiTree
void PreOrderTraverse
void InOrderTraverse
void PostOrderTraverse
int LeafNodeCount
int NodeCount
int Depth
int Swap