時間限制: 1 s?空間限制: 32000 KB?題目等級 : 白銀 Silver
題目描述?Description
求一棵二叉樹的前序遍歷,中序遍歷和后序遍歷
輸入描述?Input Description
第一行一個整數n,表示這棵樹的節點個數。
接下來n行每行2個整數L和R。第i行的兩個整數Li和Ri代表編號為i的節點的左兒子編號和右兒子編號。
輸出描述?Output Description
輸出一共三行,分別為前序遍歷,中序遍歷和后序遍歷。編號之間用空格隔開。
樣例輸入?Sample Input
5
2 3
4 5
0 0
0 0
0 0
樣例輸出?Sample Output
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
數據范圍及提示?Data Size & Hint
n <= 16
代碼實現:
1 #include<cstdio> 2 int n,a,b,tr[60],v[60]; 3 inline void xx(int x){if(!tr[x]) return;printf("%d ",tr[x]);xx(x*2);xx(x*2+1);} 4 inline void zx(int x){if(!tr[x]) return;zx(x*2);printf("%d ",tr[x]);zx(x*2+1);} 5 inline void hx(int x){if(!tr[x]) return;hx(x*2);hx(x*2+1);printf("%d ",tr[x]);} 6 int main(){ 7 scanf("%d",&n);tr[1]=v[1]=1; 8 for(int i=1;i<=n;i++){ 9 scanf("%d%d",&a,&b); 10 tr[v[i]*2]=a;tr[v[i]*2+1]=b; 11 v[a]=v[i]*2;v[b]=v[i]*2+1; 12 } 13 xx(1);printf("\n"); 14 zx(1);printf("\n"); 15 hx(1);printf("\n"); 16 return 0; 17 }
。。。