实验2 树的二叉链表表示及其遍历
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
int 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);
}
int printelem(ElemType d)
{
printf(" %d\n",d);
}
void InOrderTraverse(BiTree T)
CreateBiTree(&root);
printf("先序遍历结果:");
PreOrderTraverse(root);
printf("\n");
printf("中序遍历结果:");
InOrderTraverse(root);
printf("\n");
printf("后序遍历结果:");
PostOrderTraverse(root);
实验2树的二叉链表表示及其遍历
实验目的:掌握二叉树的链式存储结构及其遍历
实验重点:二叉树的链式存储实现方法
实验内容:用二叉链表存储结构表示下图所示二叉树的,并用递归方法输出三种遍历结果。
实验提示:
1,二叉树的链式存储结构表示
typedef struct BiTNode{
TElemType data;
InOrderTraverse(T,Visit());
PostOrderTraverse(T,Visit());
示例源程序
#include <alloc.h>
#define ERROR 0;
#define OK 1;
typedef int ElemType;
typedef struct BinaryTree
CreateBiTree(&root);
PreOrderTraverse(root,printelem);
}
代码如下
#include<stdio.h>
#include <alloc.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct BinaryTree
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->l,Visit))
if(PreOrderTraverse(T->r,Visit)) return OK;
return ERROR;
}
else
return OK;
}
intmain()
{
BiTree root;
{
if(T)
{
InOrderTraverse(T->l);
printf("%d ",T->data);
InOrderTraverse(T->r);
}
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%d ",T->data);
PreOrderTraverse(T->l);
{
ElemType data;
struct BinaryTree *l;
struct BinaryTree *r;
}*BiTree,BiNode;
int CreateSubTree(BiTree *T,ElemType *all,int i)
{
*T=(BiTree)malloc(sizeof(BiTree));
struct BitNode *lchild,*rchild;
}BiTNode,*BiTree;
2,二叉树的链式存储算法实现
CreateBiTree(&T,definition);
InsertChild(T,p,LR,c);
3,二叉树的递归法遍历
PreOrderTraverse(T,Visit());
printf("\n");
return 0;
}
PreOrderTraverse(T->r);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->l);
PreOrderTraverse(T->r);
printf("%d ",T->data);
}
}
int main()
{
BiTree root;
{
ElemType data;
struct BinaryTree *l;
struct BinaryTree *r;
}*BiTree,BiNode;
BiNode * new()
{
return( (BiNode *)malloc(sizeof(BiNode)) );
}
intCreateSubTree(BiTree *T,ElemType *all,int i)
}
intCreateBiTree(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);
}
voidprintelem(ElemType d)
{
printf("%d\n",d);
}
intPreOrderTraverse(BiTree T,int (*Visit)(ElemType d))
if((all[i]==0)||i>16)
{
*T=NULL;
return 1;
}
if(*T==NULL) return 0;
(*T)->data=all[i];
CreateSubTree(&((*T)->l),all,2*i);
CreateSubTree(&((*T)->r),all,2*i+1);
{
if ((all[i]==0)||源自文库>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);
int 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);
}
int printelem(ElemType d)
{
printf(" %d\n",d);
}
void InOrderTraverse(BiTree T)
CreateBiTree(&root);
printf("先序遍历结果:");
PreOrderTraverse(root);
printf("\n");
printf("中序遍历结果:");
InOrderTraverse(root);
printf("\n");
printf("后序遍历结果:");
PostOrderTraverse(root);
实验2树的二叉链表表示及其遍历
实验目的:掌握二叉树的链式存储结构及其遍历
实验重点:二叉树的链式存储实现方法
实验内容:用二叉链表存储结构表示下图所示二叉树的,并用递归方法输出三种遍历结果。
实验提示:
1,二叉树的链式存储结构表示
typedef struct BiTNode{
TElemType data;
InOrderTraverse(T,Visit());
PostOrderTraverse(T,Visit());
示例源程序
#include <alloc.h>
#define ERROR 0;
#define OK 1;
typedef int ElemType;
typedef struct BinaryTree
CreateBiTree(&root);
PreOrderTraverse(root,printelem);
}
代码如下
#include<stdio.h>
#include <alloc.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct BinaryTree
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->l,Visit))
if(PreOrderTraverse(T->r,Visit)) return OK;
return ERROR;
}
else
return OK;
}
intmain()
{
BiTree root;
{
if(T)
{
InOrderTraverse(T->l);
printf("%d ",T->data);
InOrderTraverse(T->r);
}
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%d ",T->data);
PreOrderTraverse(T->l);
{
ElemType data;
struct BinaryTree *l;
struct BinaryTree *r;
}*BiTree,BiNode;
int CreateSubTree(BiTree *T,ElemType *all,int i)
{
*T=(BiTree)malloc(sizeof(BiTree));
struct BitNode *lchild,*rchild;
}BiTNode,*BiTree;
2,二叉树的链式存储算法实现
CreateBiTree(&T,definition);
InsertChild(T,p,LR,c);
3,二叉树的递归法遍历
PreOrderTraverse(T,Visit());
printf("\n");
return 0;
}
PreOrderTraverse(T->r);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->l);
PreOrderTraverse(T->r);
printf("%d ",T->data);
}
}
int main()
{
BiTree root;
{
ElemType data;
struct BinaryTree *l;
struct BinaryTree *r;
}*BiTree,BiNode;
BiNode * new()
{
return( (BiNode *)malloc(sizeof(BiNode)) );
}
intCreateSubTree(BiTree *T,ElemType *all,int i)
}
intCreateBiTree(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);
}
voidprintelem(ElemType d)
{
printf("%d\n",d);
}
intPreOrderTraverse(BiTree T,int (*Visit)(ElemType d))
if((all[i]==0)||i>16)
{
*T=NULL;
return 1;
}
if(*T==NULL) return 0;
(*T)->data=all[i];
CreateSubTree(&((*T)->l),all,2*i);
CreateSubTree(&((*T)->r),all,2*i+1);
{
if ((all[i]==0)||源自文库>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);