实训六 二叉树实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

}

}

相关文档
最新文档