实训六 二叉树实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训六二叉树实训
一、实训目的:
1.进一步掌握指针变量的含义。
2.掌握二叉树的结构特征,以及各种存储结构的特点及使用范围。
3.掌握用指针类型描述、访问和处理二叉树的运算。
二、实训要求
1.认真阅读和掌握本实验的程序。
2.上机运行本程序。
3.保存和打印出程序的运行结果,并结合程序进行分析。
4.按照你二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果
三、重点:二叉树的链式存储实现方法
四、难点:二叉树的链式存储实现方法
五、实训内容:
生成如下二叉树,并得出三种遍历结果:
一、二叉树的链式存储结构表示
typedef struct BiTNode{
TElemType data;
struct BitNode *lchild,*rchild;
}BiTNode,*BiTree;
二、二叉树的链式存储算法实现
CreateBiTree(&T,definition);
InsertChild(T,p,LR,c);
三、二叉树的递归法遍历
PreOrderTraverse(T,Visit());
InOrderTraverse(T,Visit());
PostOrderTraverse(T,Visit());
示例源程序1:
/*实验六二叉树实验*/
#include
#define ERROR 0;
#define OK 1;
typedef int ElemType;
typedef struct BinaryTree
{
ElemType data;
struct BinaryTree *l;
struct BinaryTree *r;
}*BiTree,BiNode;
BiNode * new()
{
return( (BiNode *)malloc(sizeof(BiNode)) );
}
CreateSubTree(BiTree *T,ElemType *all,int i)
{
if ((all[i]==0)||i>16)
{
*T=NULL;
return OK;
}
*T=new();
if(*T==NULL) return ERROR;
(*T)->data=all[i];
CreateSubTree(&((*T)->l),all,2*i);
CreateSubTree(&((*T)->r),all,2*i+1);
}
CreateBiTree(BiTree *T)
{
ElemType all[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,};
CreateSubTree(T,all,1);
}
printelem(ElemType d)
{
printf("%d\n",d);
}
PreOrderTraverse(BiTree T,int (*Visit)(ElemType d))
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->l,Visit))
if(PreOrderTraverse(T->r,Visit)) return OK;
return ERROR;
} else return OK;
}
main()
{
BiTree root;
CreateBiTree(&root);
PreOrderTraverse(root,printelem);
}
程序2:按先序次序输入二叉树中结点的值(一个字符),`0`表示空树,生成二叉树的二叉链表存储结构, a为指向根结点的指针。然后按中序顺序遍历二叉树。
算法思想:先访问左子树,再访问根结点,最后访问右子树
本算法采程序如下:
#define NULL 0
typedef struct stu{
char data;
struct stu *left,*right;
}sn;
sn *Create(sn *a)
{char ch;
scanf("%c",&ch);
if(ch!='*'){a=(sn *)malloc(sizeof(sn));
if (!a) printf("yuguyuy");
a->data=ch;
a->left=Create(a->left);
a->right=Create(a->right);
}
else a=NULL;
return(a);
}
void inc(sn *b)
{if(b){ inc(b->left);
printf("%c",b->data);
inc(b->right);}
}
main( )
{
sn *t,*q;
q=NULL;
t=Create(q);
inc(t);
printf("\n");
getch();
}
}