輸入:節點數 n,隨後 n 行每行兩整數 L R 表示第 i 個節點的左右孩子編號(0 為空)。
輸出:三行,分別為前序、中序、後序遍歷序列,編號用空格分隔。
利用兩個陣列 L[i], R[i] 存儲左右孩子。三個遍歷函數僅打印位置不同:
void pre(int u) { // 前序:根左右
printf("%d ", u);
if (L[u]) pre(L[u]);
if (R[u]) pre(R[u]);
}
void in(int u) { // 中序:左根右
if (L[u]) in(L[u]);
printf("%d ", u);
if (R[u]) in(R[u]);
}
void post(int u) { // 後序:左右根
if (L[u]) post(L[u]);
if (R[u]) post(R[u]);
printf("%d ", u);
}
#include <stdio.h>
int L[101], R[101];
void pre(int u) { printf("%d ", u); if(L[u]) pre(L[u]); if(R[u]) pre(R[u]); }
void in(int u) { if(L[u]) in(L[u]); printf("%d ", u); if(R[u]) in(R[u]); }
void post(int u){ if(L[u]) post(L[u]); if(R[u]) post(R[u]); printf("%d ", u); }
int main() {
int n; scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d %d", &L[i], &R[i]);
pre(1); printf("\n");
in(1); printf("\n");
post(1); printf("\n");
return 0;
}
輸入:
5
2 3
4 5
0 0
0 0
0 0
輸出:
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1