二叉树的前序,中序,后序遍历
2019-05-26 本文已影响0人
刀拉
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
前序遍历
typedef struct node{
char data;
struct node *lchild,*rchild;
}BiTNode;
//前序遍历 递归
void PreOrder(BiTNode *p){
if(p!=NULL){
printf("%3c",p->data );
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}
//非递归
void Preorder1(BiTNode *p){
BiTNode *stack[MAXSIZE];
int i=0;
stack[0]=NULL;
while(p!=NULL||i>0){
if(p!=NULL){
printf("%3c",p->data);
stack[++i]=p;
p=p->lchild;
}
else{
p=stack[i--];
p=p->rchild;
}
}
}
中序遍历
//中序遍历 递归
void InOrder(BiTNode *p){
if(p!=NULL){
InOrder(p->lchild);
printf("%3c",p->data);
InOrder(p->rchild);
}
}
//非递归
void Inorder1(BiTNode *p){
BiTNode *stack[MAXSIZE];
int i=0;
stack[0]=NULL;
while(i>=0){
if(p!=NULL){
stack[++i]=p;
p=p->lchild;
}
else{
p=stack[i--];
printf("%3c",p->data);
p=p->rchild;
}
if(p==NULL&&i==0)
break;
}
}
后序遍历
//后序遍历 递归
void PostOrder(BiTNode *p){
if(p!=NULL){
PostOrder(p->lchild);
PostOrder(p->rchild);
printf("%3c",p->data);
}
}
//非递归
void Postorder1(BiTNode *p){
BiTNode *stack[MAXSIZE];
int b[MAXSIZE],i=0;
stack[0]=NULL;
do{
if(p!=NULL){
stack[++i]=p;
b[i]=0;
p=p->lchild;
}
else{
p=stack[i--];
if(b[i+1]==0){
stack[++i]=p;
b[i]=1;
p=p->rchild;
}
else{
printf("%3c",p->data);
p=NULL;
}
}
}while(p!=NULL||i>0);
}