二叉树的遍历及基本运算
一、实验目的:
1.深入理解二叉树的基本概念和递归程序设计方法。
2.熟练掌握二叉树在二叉链表存储结构中的常用遍历方法:先序、中序、后序递归遍历,了解先序、中序和后序非递归遍历及层序遍历。
3.用二叉树解决实际问题,如掌握构造哈夫曼树及其编码和译码的方法。
二、实验内容:
1.建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果;
2.建立一棵二叉树,求二叉数的树的深度、统计叶子结点的个数、统计总的结点个数、进行层序遍历、交换左右子树等;
3.哈夫曼编码译码系统。
三、实验要求
1.在本题下面提交源程序和实验运行结果截图。
2.建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果;
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct Node//结构体
{
char data;
struct Node *LChild;
struct Node *RChild;
} BiTNode,*BiTree;
void InitList(BiTree *l)//初始化
{
*l= (BiTree)malloc(sizeof(BiTNode));
(*l)->LChild = NULL;
(*l)->RChild = NULL;
}
void CreateBiTree(BiTree *bt) //先序创建二叉树
{
char ch;
ch = getchar();
if (ch == ' ') *bt = NULL;
else
{
*bt = (BiTree)malloc(sizeof(BiTNode));
(*bt)->data = ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}
void PreOrder(BiTree root)//先序遍历
{
if (root != NULL)
{
printf("%c", root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
void InOrder(BiTree root)//中序遍历
{
if (root != NULL)
{
InOrder(root