前序: 中 左 右
中序: 左 中 右
后序: 左 右 中
层次: 上到下,左到右
可以互相递推关系: 前中 -> 后 , 中后 -> 前
不能唯一确定的: 前后 -> 中
实现了前序中序后序和层次序的输出
#include <iostream>
#include <queue>
using namespace std;
#define MAX 10000
#define NIL -1
struct node {
int p;
int l, r;
};
node T[MAX];
int n;
queue <int > q;
void preOrder(int u){
if(u != NIL){
cout << u << " ";
preOrder( T[u].l);
preOrder( T[u].r);
}
}
void inOrder(int u){
if(u != NIL){
inOrder( T[u].l);
cout << u << " ";
inOrder( T[u].r);
}
}
void postOrder(int u){
if(u != NIL){
postOrder( T[u].l);
postOrder( T[u].r);
cout << u << " ";
}
}
void layerOrder(int u){
if(u != NIL){
q.push(u);
layerOrder( T[u].l);
layerOrder( T[u].r);
}
}
void layerOrderOutput(){
while(q.size() >= 1){
cout << q.front() << " ";
q.pop();
}
}
int main(){
int i, v, l, r, root;
cin >> n;
for(int i = 0; i < n; i++){
T[i].p = NIL;
}
for(int i = 0; i < n; i++){
cin >> v >> l >> r;
T[v].l = l;
T[v].r = r;
if(l != NIL) T[l].p = v;
if(r != NIL) T[r].p = v;
}
for(int i = 0; i < n; i++){
if(T[i].p == NIL){
root = i;
break;
}
}
cout << "Preorder : ";
preOrder(root);cout << endl;
cout << "Inorder : " ;
inOrder(root); cout << endl;
cout << "Postorder : " ;
postOrder(root); cout << endl;
cout << "LayerOrder : ";
layerOrder(root); layerOrderOutput(); cout << endl;
return 0;
}
/*
9
0 1 4
1 2 3
2 -1 -1
3 -1 -1
4 5 8
5 6 7
6 -1 -1
7 -1 -1
8 -1 -1
*/