二叉树地遍历算法

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

实验三二叉树遍历算法

一、实验目的

1.进一步理解掌握二叉树二叉链表存储结构。

2.掌握二叉树遍历的递归与非递归算法。

二、实验要求

1.认真阅读和掌握(先序、中序、后序和层次)遍历的递归与非递归算法。2.上机调试(先序、中序、后序和层次)遍历的递归与非递归算法。

3.保存和打印出程序的运行结果,并结合程序进行分析。

4.上机后,认真整理源程序及其注释,完成实验报告(包括源程序、实验结果、算法分析、心得体会等)。

三、实验容

先序、中序、后序遍历的递归与非递归算法和层次遍历的算法实现

程序:

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#define maxsize 100

typedef int datatype;

typedef struct bnode{

datatype data;

struct bnode *lchild,*rchild;

}bnode,*btree;

typedef struct {

bnode *node;

int flag;

}DataType;

typedef struct{

DataType data[maxsize];

int top;

}SeqStack,*PSeqStack;

typedef struct {

btree data[maxsize];

int front,rear;

}SeqQueue,*PSeqQueue;

typedef struct{

btree data[maxsize];

int top;

}SeqStack1,*PSeqStack1;

//建立一个二叉树

btree create()

{

btree t;

char ch;

scanf("%c",&ch);

if(ch=='?')

t=NULL;

else

{

t=(btree)malloc(sizeof(bnode));

t->data=ch;

t->lchild=create();

t->rchild=create();

}

return t;

}

//先序遍历

//入栈操作

void push1(PSeqStack1 s,btree sq)

{

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

printf("栈满不得入栈");

else

{

s->top++;

s->data[s->top]=sq;

}

}

//出栈操作

void pop1(PSeqStack1 s,btree *sq)

{

if(s->top==-1)

printf("栈空不得出栈");

else

{

*sq=s->data[s->top];

s->top--;

}

}

//先序遍历的递归算法

void PreOrder1(btree t)

{

if(t)

{

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

PreOrder1(t->lchild);

PreOrder1(t->rchild);

}

}

//先序遍历的非递归算法

void PreOrder2(btree t)

{

PSeqStack1 s;

s=(PSeqStack1)malloc(sizeof(SeqStack1));

btree p=t;

s->top=-1;

while(p||s->top!=-1)

{

if(p)

{

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

push1(s,p);

p=p->lchild;

}

else

{

pop1(s,&p);

p=p->rchild;

}

}

}

//中序遍历的递归算法

void InOrder1(btree t)

{

if(t)

{

InOrder1(t->lchild);

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

InOrder1(t->rchild);

}

}

//中序遍历的非递归算法

void InOrder2(btree t)

{

PSeqStack1 s;

s=(PSeqStack1)malloc(sizeof(SeqStack1));

btree p=t;

s->top=-1;

while(p||s->top!=-1)

{

if(p)

{

push1(s,p);

p=p->lchild;

}

else

{

pop1(s,&p);

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

p=p->rchild;

}

}

}

//后序遍历的递归算法

void PostOrder1(btree t)

{

if(t)

{

//t=(btree)malloc(sizeof(bnode));

PostOrder1(t->lchild);

PostOrder1(t->rchild);

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

}

}

//后序遍历的非递归算法

//入栈操作

void push(PSeqStack s,DataType sq)

{

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

相关文档
最新文档