当前位置:文档之家› 二叉树遍历

二叉树遍历

3.掌握用指针类型描述、访问和处理二叉树的运算;
4.掌握栈或队列的使用。
三、实验题目
本实验要求实现以下功能:
1.按前序次序建立一颗二叉树,以‘#’表示空。
2.中序、后序遍历该二叉树,输出遍历序列。
3.求出该二叉树的深度并输出,或求出该二叉树的叶子数目并输出。
[测试数据]:
输入以下字符串,建立二叉树:ABC##DE#G##F###
CreateTree(T->lchild);
CreateTree(T->rchild);
}
return OK;
}
Status MidTraverse(BiTree T)
{
if(T)
{
MidTraverse(T->lchild);
printf("%",T->data);
MidTraverse(T->rchild);
输出中序遍历序列应为:CBEGDFA
输出后序遍历序列应为:CGEFDBA
输出二叉树的深度应为:5
输出二叉树的叶子数目应为:3
四、实验源程序
# include <stdio.h>
# include <stdlib.h>
# define OK 1
# define ERROR -1
# define overflow -1
}
return OK;
}
Status PostTraverse(BiTree T)
{
if(T)
{
PostTraverse(T->lchild);
PostTraverse(T->rchild);
printf("%c",T->data);
}
return OK;
}
/**************统计叶子数********************/
PostTraverse(T);
printf("\n\n");
printf("此二叉树的叶子数为:");
CountLeaf(T,count);
printf("%d",count);
printf("\n\n");
printf("此二叉树的深度:");
printf("%d",Depth(T));
printf("\n\n");
return OK;
}
五、实验感想
从这次实验中我了解到了二叉树中序,后序访问以及其中所涉及到的不同遍历的方式,同时还让我知道了先遍历后访问的顺序。
}
return depthval;
}
int main()
{
BiTree T;
int count=0;//统计叶子数
printf("创建二叉树:");
CreateTree(T);
printf("\n中序输出二叉树:");
MidTraverse(T);
printf("\n");
printf("\n后序输出二叉树:");
int Depth(BiTree T)
{
int depthval=0,depthleft=0,depthright=0;
if(!T)
depthval=0;
else
{
depthleft=Depth(T->lchild);
depthright=Depth(T->rchild);
depthval=1+(depthleft>depthright?depthleft:depthright);
Status CreateTree(BiTree &T)//按先序输入二叉树中节点的值
{
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(overflow);
T->data=ch;
江苏大学京江学院
实验报告
课程名称:二叉树操作
课程类型:必修
课程题目:二叉树的建立,二叉树的遍历。
姓名:吴江
班级:J计算机1002班
学号:3101110038
导师:王新宇
一、实验内容
二叉树的建立,二叉树的遍历。
二、实验目的
1.进一步掌握指针变量的使用;
2.掌握二叉树的结构特征以及各种存储结构的特点及使用范围。
Status CountLeaf(BiTree T,int &count)
{
if(T)
{
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
return OK;
}
/*************输出二叉树的深度*************/
typedef int ElemType;
typedef int Status;
typedef struct BiTNode
{
ElemType data;//此处Elem Type根据数据类型实际情况而定
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
相关主题