实验六 二叉树及应用的实验.docx
- 文档编号:8266127
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:9
- 大小:15.89KB
实验六 二叉树及应用的实验.docx
《实验六 二叉树及应用的实验.docx》由会员分享,可在线阅读,更多相关《实验六 二叉树及应用的实验.docx(9页珍藏版)》请在冰豆网上搜索。
实验六二叉树及应用的实验
实验六二叉树及应用的实验
【实验目的】掌握二叉树的左右链存储实现,二叉树的建立方法,二叉树的遍历算法,哈夫曼树的程序实现。
【实验说明】
1、存储结构定义及库文件
#include
#include
#defineTRUE1
#defineFALSE0
#defineStack_Size50
typedefcharDataType;
typedefstructnode{
DataTypedata;
structnode*lchild,*rchild;
}BiTNode,*BiTree;
2、建立二叉树
voidCreateBiTree(BiTree*bt)
{charch;
ch=getchar();
if(ch=='.')*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));
}
}
3、先序递归遍历二叉树
voidPreOrder(BiTreeroot)
//root指向二叉树根结点
{if(root!
=NULL)
{
printf("%c",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
4、中序非递归遍历二叉树
voidinorder(BiTreeroot)
{
BiTNode*p;
inttop;
BiTreeS[Stack_Size];
top=0;
p=root;
//printf("ZYZ\n");
do{
while(p!
=NULL)
{
if(top>Stack_Size-1){printf("栈满\n");return;}
else{top=top+1;
S[top]=p;
p=p->lchild;
};
}
if(top!
=0)
{p=S[top];
top=top-1;
printf("%c",p->data);
p=p->rchild;
}
}while(p!
=NULL||top!
=0);
}
4、主控菜单处理调试程序
voidmain()
{
BiTreeT=NULL;
intxz=1;
charch;
while(xz){
printf("二叉树的建立及遍历\n");
printf("==========================\n");
printf("1、建立二叉树存储结构\n");
printf("2、二叉树的前序遍历(递归)\n");
printf("3、二叉树的中序遍历(非递归)\n");
printf("0、退出系统\n");
printf("===========================\n");
printf("请选择:
0--3");
scanf("%d",&xz);
switch(xz)
{case0:
printf("再见!
\n");
return;
case1:
ch=getchar();
printf("按扩展先序遍历序列输入二叉树各结点值:
");
CreateBiTree(&T);
printf("\n二叉树的链式存储结构建立完成!
\n");
printf("\n");
break;
case2:
printf("二叉树先序遍历序列为:
");
if(T)PreOrder(T);
elseprintf("\n空树");
printf("\n");
printf("\n");
break;
case3:
printf("二叉树中序遍历序列为:
");
inorder(T);
printf("\n");
break;
}
}
return;
}//main
【实验内容】
⑴二叉树的遍历算法(非递归实现先序遍历,用递归实现中序遍历,用非递归实现后序遍历,层次遍历)
⑵二叉树采用二叉链表方式存储,找到二叉树中度为0的结点个数。
⑶二叉树采用二叉链表方式存储,找到二叉树中任两个结点的最近公共祖先。
算法提示:
①先按先序序列建立二叉树;
②再分别采用递归算法找结点到根之间的路径,并将其存到一个数组中;③比较两个数组中元素,找到最近公共祖先。
【实验要求】利用所给的实验说明完成实验内容中⑴――⑶要求的任一个程序,并参照实验说明完成调试。
写出试验报告并在实验完成后一周内交实验报告。
//1、存储结构定义及库文件
#include
#include
#defineTRUE1
#defineFALSE0
#defineStack_Size50
typedefcharDataType;
typedefstructnode{
DataTypedata;
structnode*lchild,*rchild;
}BiTNode,*BiTree;
//2、建立二叉树
voidCreateBiTree(BiTree*bt)
{charch;
ch=getchar();
if(ch=='.')*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));
}
}
//3、非递归实现先序遍历
voidinorder(BiTreeroot)
{
BiTNode*p;
inttop;
BiTreeS[Stack_Size];
top=0;
p=root;
//printf("ZYZ\n");
do{
while(p!
=NULL)
{if(top!
=0)
{p=S[top];
top=top-1;
printf("%c",p->data);
p=p->rchild;
}
if(top>Stack_Size-1){printf("栈满\n");return;}
else{top=top+1;
S[top]=p;
p=p->lchild;
};
}
}while(p!
=NULL||top!
=0);
}
//4、中序递归遍历二叉树
voidInOrder(BiTreeroot)
//root指向二叉树根结点
{if(root!
=NULL)
{InOrder(root->lchild);
printf("%c",root->data);
InOrder(root->rchild);
}
//用非递归实现后序遍历
voidPostorder(BiTreeroot)
{
BiTNode*p,*q;
StackS;
q=NULL;
p=root;
InitStack(&S);
while(p!
=NULL||!
IsEmpty(S))
{
while(p!
=NULL)
{
Push(&S,p);
p=p->lchild;
}
if(!
IsEmpty(S))
{
GetTop(&S,&p);
if((p->rchild==NULL)||(p->rchild==q))
{
visit(p->data);
q=p;
Pop(&S,&p);
p=NULL;
}
else
p=p->rchild;
}
}
}
//5、主控菜单处理调试程序
voidmain()
{
BiTreeT=NULL;
intxz=1;
charch;
while(xz){
printf("二叉树的建立及遍历\n");
printf("==========================\n");
printf("1、建立二叉树存储结构\n");
printf("2、二叉树的前序遍历(非递归)\n");
printf("3、二叉树的中序遍历(递归)\n");
printf("3、二叉树的后序遍历(非递归)\n");
printf("0、退出系统\n");
printf("===========================\n");
printf("请选择:
0--3");
scanf("%d",&xz);
switch(xz)
{case0:
printf("再见!
\n");
return;
case1:
ch=getchar();
printf("按扩展先序遍历序列输入二叉树各结点值:
");
CreateBiTree(&T);
printf("\n二叉树的链式存储结构建立完成!
\n");
printf("\n");
break;
case2:
printf("二叉树先序遍历序列为:
");
Preorder(T);
printf("\n");
break;
case3:
printf("二叉树中序遍历序列为:
");
if(T)PreOrder(T);
elseprintf("\n空树");
printf("\n");
printf("\n");
break;
case4:
printf("二叉树后序遍历序列为:
");
Postorder(T);
printf("\n");
break;
}
}
return;
}//main
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 二叉树及应用的实验 实验 二叉 应用