当前位置:文档之家› 数据结构遍历二叉树实验报告

数据结构遍历二叉树实验报告

太原师范学院
实验报告Experimentation Report of Taiyuan Normal University
系部计算机系年级XX 课程数据结构
姓名XXX 同组者日期
项目二叉树的遍历
一、实验目的:
①设计程序分别实现实现对二叉树的先序、中序、后序遍历。

②计算出二叉树的节点个数、叶子节点个数、二叉树的深度等。

二、实验要求:
①掌握先序、中序、后序遍历二叉树的过程。

②掌握二叉树的先序、中序、后序遍历算法。

三、实验平台
硬件:笔记本电脑一台;
软件:Windows 10,visual_studio_2010;
四、运行结果(运行界面图及说明)
测试数据:ABC##DE#G##F### -*a##b##c##
五、实验体会
1.上机多加练习才能真正学会相关内容;
2.应对二叉树的性质熟练掌握;
3.实验错误太多,应加强基础知识的学习。

六、附完整代码
#include<iostream>
using namespace std;
#include<iomanip>
#include<fstream>
#include<string>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int TElemType;
#define MAXSIZE 100
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrderaTraverse(BiTree T)
{if(T)
{printf("%c",T->data);
InOrderaTraverse(T->lchild);
InOrderaTraverse(T->rchild);
}
}
void InOrderbTraverse(BiTree T)
{if(T)
{
InOrderbTraverse(T->lchild);
printf("%c",T->data);
InOrderbTraverse(T->rchild);
}
}
void InOrdercTraverse(BiTree T)
{if(T)
{
InOrdercTraverse(T->lchild);
InOrdercTraverse(T->rchild);
printf("%c",T->data);
}
}
int Depth(BiTree T)
{int m,n;
if(T==NULL) return 0;
else{m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n) return (m+1);
else return(n+1);
}
}
int NodeCount(BiTree T)
{if(T==NULL) return 0;
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;}
int LeafCount(BiTree T)
{if(T==NULL) return 0;
{if((T->lchild==NULL)&&(T->rchild==NULL))
return 1;
return LeafCount(T->lchild)+LeafCount(T->rchild);}
};
int main()
{
BiTree T;
cout<<"手动输入一棵二叉树为: ";
CreateBiTree(T);
cout<<"先序遍历输出二叉树为: ";
InOrderaTraverse(T);
cout<<endl;
cout<<"中序遍历输出二叉树为: ";
InOrderbTraverse(T);
cout<<endl;
cout<<"后续遍历输出二叉树为: ";
InOrdercTraverse(T);
cout<<endl;
cout<<"此二叉树的结点个数为: "<<NodeCount(T)<<endl; cout<<"此二叉树叶子结点个数为: "<<LeafCount(T)<<endl; cout<<"此二叉树的深度为: "<<Depth(T)<<endl;
}。

相关主题