以下是二叉树的三种递归遍历方法,包括前序、中序以及后序递归。
递归所用到的图示如下:
#include<iostream>
using namespace std;
//抽象数据类型——变量定义和变量说明
const int MaxSize=10;
typedef char datatype;
typedef struct node
{
datatype data;
struct node *lchild,*rchild;
}BTnode,*BinTree;
//构建一棵二叉树
void Create(BinTree &root)
{
BTnode *A=new BTnode;
BTnode *B=new BTnode;
BTnode *C=new BTnode;
BTnode *D=new BTnode;
BTnode *E=new BTnode;
BTnode *F=new BTnode;
BTnode *G=new BTnode;
BTnode *H=new BTnode;
BTnode *I=new BTnode;
BTnode *J=new BTnode;
A->data='A';
B->data='B';
C->data='C';
D->data='D';
E->data='E';
F->data='F';
G->data='G';
H->data='H';
I->data='I';
J->data='J';
A->lchild=B;
A->rchild=C;
B->lchild=D;
B->rchild=E;
E->lchild=H;
E->rchild=I;
C->lchild=F;
C->rchild=G;
F->lchild=NULL;
F->rchild=J;
D->lchild=D->rchild=NULL;
H->lchild=H->rchild=NULL;
I->lchild=I->rchild=NULL;
J->lchild=J->rchild=NULL;
G->lchild=G->rchild=NULL;
root=A;
}
//使用递归进行前序遍历输出
void preOrder(BinTree &root)
{
BTnode *p=root;
if(p!=NULL)
{
cout<<char(p->data)<<" ";
preOrder(p->lchild);
preOrder(p->rchild);
}
}
//使用递归进行中序遍历输出
void inOrder(BinTree &root)
{
BTnode *p=root;
if(p!=NULL)
{
preOrder(p->lchild);
cout<<char(p->data)<<" ";
preOrder(p->rchild);
}
}
//使用递归进行后序遍历输出
void postOrder(BinTree &root)
{
BTnode *p=root;
if(p!=NULL)
{
preOrder(p->lchild);
preOrder(p->rchild);
cout<<char(p->data)<<" ";
}
}
//测试函数
int main()
{
BinTree root;
Create(root);
cout<<"递归前序遍历结果为:"<<endl;
preOrder(root);
cout<<endl<<"递归中序遍历结果为:"<<endl;
inOrder(root);
cout<<endl<<"递归后序遍历结果为:"<<endl;
postOrder(root);
return 0;
}