先序遍历:访问根结点,先序遍历左子树,先序遍历右子树;
中序遍历:中序遍历左子树,访问根结点,中序遍历右子树;
后序遍历:后序遍历左子树,后序遍历右子树,访问根结点;
从上面的定义看出是个递归的过程:
下面以中序遍历静态链式二叉树为例:
#include<stdio.h>
typedef struct node
{
struct node * lchild;
struct node * rchild;
char data;
}*jie;
void Show(jie p);
int main()
{
jie A=new struct node;
jie B=new struct node;
jie C=new struct node;
jie D=new struct node;
jie E=new struct node;
jie F=new struct node;
jie G=new struct node;
A->data='A';
A->lchild=B;
A->rchild=C;
B->data='B';
B->lchild=D;
B->rchild=E;
C->data='C';
C->lchild=F;
C->rchild=G;
D->data='D';
D->lchild=NULL;
D->rchild=NULL;
E->data='E';
E->lchild=NULL;
E->rchild=NULL;
F->data='F';
F->lchild=NULL;
F->rchild=NULL;
G->data='G';
G->lchild=NULL;
G->rchild=NULL;
Show(A);
return 0;
}
void Show(jie p)
{
if(p->lchild!=NULL)
{
Show(p->lchild);
}
printf("%c",p->data);
if(p->rchild!=NULL)
{
Show(p->rchild);
}
}
要改为其他方式遍历的话就是换一下调用递归函数的先后顺序就行了;