3143 二叉樹的序遍歷

自為風月馬前卒發表於2017-03-30

 

3143 二叉樹的序遍歷

 

時間限制: 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

 1 #include<iostream>
 2 using namespace std;
 3 int root;
 4 struct node
 5 {
 6     int parent;
 7     int date;
 8     int lchild;
 9     int rchild;
10 }a[101];
11 void xianxu(int i)
12 {
13     cout<<i<<" ";
14     if(a[i].lchild!=0)
15     {
16         xianxu(a[i].lchild);
17     }
18     if(a[i].rchild!=0)
19     {
20         xianxu(a[i].rchild);
21     }
22 }
23 void zhongxu(int i)
24 {
25     if(a[i].lchild!=0)
26     {
27         zhongxu(a[i].lchild);
28     }
29     cout<<i<<" ";
30     if(a[i].rchild!=0)
31     {
32         zhongxu(a[i].rchild);
33     }
34 }
35 void houxu(int i)
36 {
37 
38     if(a[i].lchild!=0)
39     {
40         houxu(a[i].lchild);
41     }
42     if(a[i].rchild!=0)
43     {
44         houxu(a[i].rchild);
45     }
46     cout<<i<<" ";
47 }
48 int main()
49 {
50     int n;
51     cin>>n;
52     for(int i=1;i<=n;i++)
53     {
54         cin>>a[i].lchild>>a[i].rchild;
55         a[a[i].lchild].parent=i;
56         a[a[i].rchild].parent=i;
57     }
58     for(int i=1;i<=n;i++)
59     {
60         if(a[i].parent==0)
61         {
62             root=i;
63         }
64     }
65     xianxu(root);
66     cout<<endl;
67     zhongxu(root);
68     cout<<endl;
69     houxu(root);
70     return 0;
71 }

 

相關文章