二叉树的前中后序遍历
前序遍历
void find(int x){
printf("%d ",x);
if(e[x].lc!=0) find(e[x].lc);
if(e[x].rc!=0) find(e[x].rc);
}
中序遍历
void find(int x){
if(e[x].lc!=0) find(e[x].lc);
printf("%d ",x);
if(e[x].rc!=0) find(e[x].rc);
}
后序遍历
void find(int x){
if(e[x].lc!=0) find(e[x].lc);
if(e[x].rc!=0) find(e[x].rc);
printf("%d ",x);
}
完整代码
这里提供一组数据
10
1 2 3
2 4 5
3 6 7
4 8 9
5 0 0
6 0 10
7 0 0
8 0 0
9 0 0
10 0 0
1 2 4 8 9 5 3 6 10 7 //前序遍历
8 4 9 2 5 1 6 3 10 7 //中序遍历
8 9 4 5 2 10 6 7 3 1 //后序遍历
以前序遍历为例 中后序遍历改一下find函数就可
#include<iostream>
#include<cstdio>
#define maxn 10010
using namespace std;
int n;
struct node{
int lc,rc;
}e[maxn];
void add(int u,int l,int r){
e[u].lc=l;
e[u].rc=r;
}
void find(int x){
printf("%d ",x);
if(e[x].lc!=0) find(e[x].lc);
if(e[x].rc!=0) find(e[x].rc);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int u,l,r;
scanf("%d%d%d",&u,&l,&r);
add(u,l,r);
}
find(1);
}
清晰明了简明易懂