二叉树的遍历算法

 

// example2.cpp : 定义控制台应用程序的入口点。
//


// example1.cpp :
定义控制台应用程序的入口点。
//
#include"stdio.h"
#include"malloc.h"

#define MAX 100
typedef char TDataType;
typedef struct TreeNode
{TDataType data;
struct TreeNode*lchild,*rchild;
}TreeNode,*Tree;

typedef Tree QDataType;
typedef struct
{QDataType data[MAX+1];
int front,rear;
}Queue;


//
1)初始化队列q
void InitQueue(Queue &q)
{
q.front=0;
q.rear=0;
}

//2)判断队列q是否非空;
int EmptyQueue(Queue &q)
{
if(q.rear==q.front) return 1;
else return 0;
}


//
3)依次进队元素abc
void InsqQueue(Queue &q,QDataType x)
{
if(q.rear==MAX){printf("overflow"); }
q.rear++;
q.data[q.rear]=x;

}
//(4)
出队一个元素,输出该元素;
OutsqQueue(Queue &q,Tree &p)
{
if(EmptyQueue(q))
{
printf("underflow");
return 0;
}
else
{
p=q.data[q.front+1];
// printf("%c",x);
q.front++;
}
if(EmptyQueue(q)){q.front=0;q.rear=0;}
return 1;
}

//5)输出队列的元素个数;
int NumberQueue(Queue &q)
{
if(EmptyQueue(q)) return 0;
else return(q.rear-q.front);
}

//8)输出出队序列; begin
int DisplaySqQueue(Queue &q)
{
int i;
if(EmptyQueue(q))return 1;
for(i=1;i<=q.rear;i++)
{
printf("%c",q.data[q.front+1]);
q.front++;
}

printf("\n");
return 1;
}


//n
9)释放队列。

void DestroyList_SqQueue(Queue &q)
{
if(EmptyQueue(q)==0)
q.front=0;q.rear=0;
}

Tree CreateTree(Tree &r)
{
char c;
scanf("%c",&c);
if(c==' ')r=NULL;
else
{
r=(Tree)malloc(sizeof(TreeNode));
if(!r)return(NULL);
r->data=c;
r->lchild = CreateTree(r->lchild);
r->rchild = CreateTree(r->rchild);

}
return(r);
}
//
先序遍历二叉树
void Preorder(Tree r)
{
if(r)
{
printf("%c",r->data);
Preorder(r->lchild);
Preorder(r->rchild);
}
}

//中序遍历二叉树
void midorder(Tree r)
{
if(r)
{
midorder(r->lchild);
printf("%c",r->data);
midorder(r->rchild);
}
}
//
后序遍历二叉树
void postorder(Tree r)
{
if(r)
{
postorder(r->lchild);
postorder(r->rchild);
printf("%c",r->data);
}
}
//
层次遍历二叉树
void TravelTree(Tree r)
{
Queue q;
InitQueue(q);
Tree p,p1,p2;
p=r;//(Tree)malloc(sizeof(TreeNode));
if(p)InsqQueue(q,p);
while(!EmptyQueue(q))
{
OutsqQueue(q,p);
printf("%c",p->data);
p1=p->lchild;p2=p->rchild;
if(p1) InsqQueue(q,p1);
if(p2) InsqQueue(q,p2);
}

}


void main()
{
Tree r;
printf("
初始化树\n");
CreateTree(r);
printf("\n
先序遍历二叉树\n");
Preorder(r);
printf("\n
中序遍历二叉树\n");
midorder(r);
printf("\n
后序遍历二叉树\n");
postorder(r);
printf("\n
层序遍历二叉树\n");
TravelTree(r);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值