- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二 二叉树有关操作
实验目的
熟练掌握二叉树的基本操作的实现;
以二叉树的各种操作(建立、遍历等)的实现为重点;
通过本次实验加深对 C++语言的使用(特别是函数的参数调用、指针类型的应用和链表的建立等各种基本操作)。
实验内容
创建一颗二叉树(如图),实现其先序,中序,后序遍历。二叉树嵌套表示
为
(A(B(D(,H),E),C(F,G(I,))));
A
A
B
C
D
E
F
G
H
I
实验步骤
理解二叉树遍历的基本实验原理;
分析二叉树结构,得出其遍历的算法;
用 C++语言实现该算法;
应用所给测试数据,得出结果;
实验程序
1)头文件模块#includeiostream.h #includemalloc.h
#define MaxSize 100//宏定义#define MaxWidth 40
typedef char elemtype;//typedef 常用来定义一个标识符及关键字的别名
//它是语言编译过程的一部分,但它并不实际分配内存空间---字符型元素typedef struct node// 定义结点结构
{
elemtype data;//数据元素
struct node *left,*right;//树节点指针
}BTree;//定义二叉树的类型2)生成二叉树
void dispstack(BTree *stack[],int top);
void creatree(BTree *b,char *str)//根据嵌套括号表示法的字符串*str 生成链接存储的二叉树
{
BTree *stack[MaxSize],*p;//定义一个栈和变量指针 p
int top=-1,k,j=0;//top 为栈指针,k 指定是左孩子还是右孩子,j 为 str
指针
char ch; b=NULL;
ch=str[j]; while(ch!=\0)
{
switch(ch)
{
case (:top++;stack[top]=p;k=1;break;//是左节点case ):top--;break;
case ,:k=2;break;//右节点default:p=(BTree*)malloc(sizeof(BTree));
p-data=ch;p-left=p-right=NULL; if (b==NULL)//根节点
b=p; else
{
switch(k)
{
case 1:stack[top]-left=p;break; case 2:stack[top]-right=p;break;
}
}
}
j++;
ch=str[j];
}
}
输出二叉树
void printree(BTree *b)//输出二叉树
{
if(b!=NULL)
{
coutb-data;
if(b-left!=NULL||b-right!=NULL)
{
cout(;
printree(b-left);//递归处理左子树if(b-right!=NULL) cout,; printree(b-right);//递归处理右子树cout);
}
}
}
先序遍历二叉树
void preorder(BTree *b)//先序遍历二叉树
{
if(b!=NULL)
{
coutb-data ; preorder(b-left); preorder(b-right);
}
}
先序遍历查找值为 x 的节点
BTree *find(BTree *b,elemtype x)//采用先序遍历查找值为 x 的节点
{
BTree *p; if(b==NULL)
return NULL; else
if(b-data==x) return b;
else
{
p=find(b-left,x); if(p!=NULL)
return p; else
return find(b-right,x);
}
}
中序遍历二叉树
void inorder(BTree *b)//中序遍历二叉树
{
if(b!=NULL)
{
inorder(b-left); coutb-data ; inorder(b-right);
}
}
后序遍历二叉树
void postorder(BTree *b)//后序遍历二叉树
{
if(b!=NULL)
{
postorder(b-left); postorder(b-right); coutb-data ;
}
}
主程序模块#include b.h void main()
{
BTree *b;
creatree(b,(f(e(w),d(,v(,n),m))));//创建二叉树cout嵌套表示法:endl;
printree(b); coutendl先序遍历:; preorder(b); coutendl中序遍历:; in
原创力文档


文档评论(0)