一:递归遍历
void Order(Binode* bt)
{
if(bt==NULL)
return;
else
{
cout<<bt->data;//前序遍历
Order(bt->lchild);
cout<<bt->data;//中序遍历
Order(bt->rchild);
cout<<bt->data;//后序遍历
}
}
二:非递归遍历
前序遍历
void PreOrder(Binode* bt)
{
//采用顺序栈,假定不会发生上溢
int top=-1;
Binode* S[100];
while(bt!=NULL||top!=-1)//两条件都不成立说明遍历结束了
{
while(bt!=NULL)
{
cout<<bt->data;
S[++top]=bt;
bt=bt->lchild;
}
if(top!=-1)//栈非空
{
bt=S[top--];
bt=bt->rchild;
}
}
}
中序遍历
void InOrder(Binode * bt)
{
int top=-1;
Binode* A[100];
while(bt!=NULL||top!=-1)
{
while(bt!=NULL)
{
A[++top]=bt;
bt=bt->lchild;
}
if(top!=-1)
{
bt=S[top--];
cout<<bt->data;
bt=bt->rchild;
}
}
}
后序遍历
struct element
{
Binode* ptr;
int flag;
}
void PostOrder(Binode* bt)
{
int top=-1;
element A[100];
while(bt!=NULL||top!=-1)
{
while(bt!=NULL)
{
top++;
A[top].ptr=bt;
A[top].flag=1;
bt=bt->lchild;
}
while(top!=-1&&A[top].flag==2)//第二次出栈的结点才能访问
{
bt=A[top--].ptr;
cout<<bt->data;
}
if(top!=-1)
{
A[top].flag=2;
bt=A[top].ptr->rchild;
}
}
}
层序遍历
void LeverOrder(Binode *bt) { Binode* Q[100]; int front,rear; front=rear=-1; if(root==NULL) return; Q[++rear]=bt; while(front!=rear) { Binode* q=Q[++front]; cout<<q.data; if(q->lchild!=NULL) Q[++rear]=q->lchild; if(q->rchild!=NULL) Q[++rear]=q->rchild; } }