遍历二叉树(递归+非递归)实验资料报告材料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

附:源程序:

递归算法程序

#include

#include

#include

#define maxsize 100

#define FALSE 0

#define TRUE 1

typedef struct node //二叉树结构体类型定义{

char data;

struct node *lchild;

struct node *rchild;

}bitnode,*bitree;

/*扩展先序序列创建二叉链表*/

void cteatebitree(bitree *bt)

{

char ch;

ch=getchar();

if(ch=='.')*bt=NULL;

else

{

*bt=(bitree)malloc(sizeof(bitnode));

(*bt)->data=ch;

cteatebitree(&((*bt)->lchild));

cteatebitree(&((*bt)->rchild));

}

}

/*先序递归遍历*/

void preorder(bitree root)

{

if(root!=NULL)

{

printf("%c ",root->data);

preorder(root->lchild);

preorder(root->rchild);

}

}

/*中序递归遍历*/

void inorder(bitree root)

{

if(root!=NULL)

{

preorder(root->lchild);

printf("%c ",root->data);

preorder(root->rchild);

}

}

/*后序递归遍历*/

void postorder(bitree root)

{

if(root!=NULL)

{

preorder(root->lchild);

preorder(root->rchild);

printf("%c ",root->data);

}

}

void main()

{

bitree bt;

cteatebitree(&bt);

printf("先序递归遍历序列:\n");

preorder(bt);

printf("\n");

printf("中序递归遍历序列:\n");

inorder(bt);

printf("\n");

printf("后序递归遍历序列:\n");

postorder(bt);

printf("\n");

}

非递归算法程序

#include

#include

#include

#define FALSE 0

#define TRUE 1

#define maxsize 100

typedef struct node //二叉树结构体定义{

char data;

struct node *lchild;

struct node *rchild;

}bitnode,*bitree;

typedef struct //顺序栈结构体定义{

bitree elem[maxsize];

int top;

}seqstack;

int push(seqstack *s,bitree x) //入栈

{

if(s->top==maxsize-1)

return(FALSE);

s->top++;

s->elem[s->top]=x;

return(TRUE);

}

bitree pop(seqstack *s,bitree x) //出栈

{

if(s->top==-1) return NULL;

else

{

x=s->elem[s->top];

s->top--;

return x;

}

}

int gettop(seqstack *s,bitree *x) //读取栈顶元素

{

if(s->top==-1) return FALSE;

else

{

*x=s->elem[s->top];

return TRUE;

}

}

void createbitree(bitree *bt) //扩展先序序列创建二叉链表{

char ch;

ch=getchar();

if(ch=='.')*bt=NULL;

else

{

*bt=(bitree)malloc(sizeof(bitnode));

(*bt)->data=ch;

createbitree(&((*bt)->lchild));

createbitree(&((*bt)->rchild));

}

}

void preorder1(bitree root,seqstack s) //先序遍历

{

相关文档
最新文档