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;
}
}
}
}
#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;
}
}
}
}
相关文章推荐
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
- 二叉树的实现(递归遍历和非递归遍历)C++
- C++ 二叉树的构建,先序/中序/后序的递归/非递归实现
- leetcode笔试题二叉树的前序、中序、后序遍历的递归和循环c++实现
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- 二叉树的前序、中序、后序三种遍历的六种实现方式(递归、非递归)(C++)
- 实现二叉树的前序/中序/后序递归、非递归遍历
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 二叉树的先序、中序和后序的非递归遍历(C语言实现)
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 二叉树的递归 非递归 先序 中序 后序及层次遍历代码实现
- 二叉树先序,中序,后序遍历非递归实现
- (以实现)c++非递归层次二叉树
- 二叉树的 前序、中序、后序的代码实现(递归和非递归)
- 二叉树的非递归前序、中序以及后序遍历C++模版类实现