您的位置:首页 > 编程语言 > C语言/C++

c/c++实现二叉树前序,中序和后序的递归和非递归遍历

2017-03-21 16:29 579 查看
 c/c++实现实现二叉树前序,中序和后序的递归和非递归遍历

#include<stdio.h>

#include<stdlib.h>

#include<seqstack.h>//import self-defined stack

typedef char DataType;

typedef struct bnode{
DataType data;
struct bonde *lchild,*rchild;

}Bnode,*BTree;

//this struct definition is for PostOrder

typedef struct{
BTree node;
int flag;

}DNode;

void PreOrder(BTree t)//recursion

{
if(t)
{
visit(t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}

}

void PreOrder(BTree t)//use stack 

{
PSeqStack p;
BTree bt=t;
p=init_SeqStack();
while(bt || !isEmpty_SeqStack(p))
{
if(bt)
{
visit(bt->data);
push_SeqStack(p,bt);
bt=bt->lchild;
}
else
{
pop_SeqStack(p,&bt);
bt=bt->rchild;
}
}

}

void InOrder(BTree t)//recursion

{
if(t)
{
InOrder(t->lchild);
visit(t->data);
InOrder(t->rchild);
}

}

void InOrder(BTree t)//use stack 

{
PSeqStack p;
BTree bt=t;
p=init_SeqStack();
while(bt || !isEmpty_SeqStack(p))
{
if(bt)
{
push_SeqStack(p,bt);
bt=bt->lchild;
}
else
{
pop_SeqStack(p,&bt);
visit(bt->data);
bt=bt->rchild;
}
}

}

void PostOrder(BTree t)//recursion

{
if(t)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
visit(t->data);
}

}

void PostOrder(BTree t)//use stack 

{
PSeqStack p;
DNode dn;
BTree bt=t;
p=init_SeqStack();
while(bt || !isEmpty_SeqStack(p))
{
if(bt)
{
dn.flag=0;
dn.node=bt;
push_SeqStack(p,dn);
bt=bt->lchild;
}
else
{
pop_SeqStack(p,&dn);
bt=dn.node;
if(dn.flag==0)
{
dn.flag=1;
push_SeqStack(p,dn);
bt=bt->rchild;

}
else
{

visit(bt->data);
bt=NULL;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐