后序遍历:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct BiNode
{
char ch;
struct BiNode *lchild,*rchild;
int tag;
}BiNode,*BiTree;
typedef struct Stack
{
BiTree stack;
struct Stack *next;
}Stack,*Sq;
void CreateTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='@')T=NULL;
else
{
T=new BiNode;
T->ch=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void Push(Sq &s,BiTree p)
{
Stack *q;
q=new Stack;
q->stack=p;
q->next=s;
s=q;
}
void Pop(Sq &s,BiTree &p)
{
p=s->stack;
s=s->next;
}
int stackempty(Sq s)
{
if(s==NULL)return 0;
else return 1;
}
void houxu(BiTree T)
{
BiTree p;
Sq s,q;
s=NULL;
p=T;
while(p!=NULL||stackempty(s)==1)
{
if(p)
{
Push(s,p);
p->tag=0;
p=p->lchild;
}
else
{
Pop(s,p);
if(p->tag==0){p->tag=1;Push(s,p);p=p->rchild;}
else
{printf("%c",p->ch);p=NULL;}
}
}
}
int main()
{ BiTree root;
CreateTree(root);
houxu(root);
return 0;
}
中序遍历
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct BiNode
{
char ch;
struct BiNode *lchild,*rchild;
int tag;
}BiNode,*BiTree;
typedef struct Stack
{
BiTree stack;
struct Stack *next;
}Stack,*Sq;
void CreateTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='@')T=NULL;
else
{
T=new BiNode;
T->ch=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void Push(Sq &s,BiTree p)
{
Stack *q;
q=new Stack;
q->stack=p;
q->next=s;
s=q;
}
void Pop(Sq &s,BiTree &p)
{
p=s->stack;
s=s->next;
}
int stackempty(Sq s)
{
if(s==NULL)return 0;
else return 1;
}
void houxu(BiTree T)
{
BiTree p;
Sq s,q;
s=NULL;
p=T;
while(p!=NULL||stackempty(s)==1)
{
if(p)
{
Push(s,p);
p=p->lchild;
}
else
{
Pop(s,p);
printf("%c",p->ch);
p=p->rchild;
}
}
}
int main()
{ BiTree root;
CreateTree(root);
houxu(root);
return 0;
}
先序遍历
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct BiNode
{
char ch;
struct BiNode *lchild,*rchild;
int tag;
}BiNode,*BiTree;
typedef struct Stack
{
BiTree stack;
struct Stack *next;
}Stack,*Sq;
void CreateTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='@')T=NULL;
else
{
T=new BiNode;
T->ch=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void Push(Sq &s,BiTree p)
{
Stack *q;
q=new Stack;
q->stack=p;
q->next=s;
s=q;
}
void Pop(Sq &s,BiTree &p)
{
p=s->stack;
s=s->next;
}
int stackempty(Sq s)
{
if(s==NULL)return 0;
else return 1;
}
void houxu(BiTree T)
{
BiTree p;
Sq s,q;
s=NULL;
p=T;
while(p!=NULL||stackempty(s)==1)
{
if(p)
{ printf("%c",p->ch);
Push(s,p);
p=p->lchild;
}
else
{
Pop(s,p);
p=p->rchild;
}
}
}
int main()
{ BiTree root;
CreateTree(root);
houxu(root);
return 0;
}