首页 > 其他 > 详细

【PAT甲级】1102 Invert a Binary Tree (25 分)(层次遍历和中序遍历)

时间:2019-12-02 20:09:51      阅读:95      评论:0      收藏:0      [点我收藏+]

题意:

输入一个正整数N(<=10),接着输入0~N-1每个结点的左右儿子结点,输出这颗二叉树的反转的层次遍历和中序遍历。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[17][5];
 5 bool vis[15];
 6 void bfs(int r){
 7     queue<int>q;
 8     q.push(r);
 9     cout<<r;
10     while(!q.empty()){
11         int now=q.front();
12         q.pop();
13         if(a[now][0]!=-1){
14             cout<<" ";
15             cout<<a[now][0];
16             q.push(a[now][0]);
17         }
18         if(a[now][1]!=-1){
19             cout<<" ";
20             cout<<a[now][1];
21             q.push(a[now][1]);
22         }
23     }
24 }
25 int flag=0;
26 void dfs(int r){
27     if(a[r][0]!=-1)
28         dfs(a[r][0]);
29     if(flag)
30         cout<<" ";
31     cout<<r;
32     flag=1;
33     if(a[r][1]!=-1)
34         dfs(a[r][1]);
35 }
36 int main(){
37     ios::sync_with_stdio(false);
38     cin.tie(NULL);
39     cout.tie(NULL);
40     for(int i=0;i<10;++i)
41         a[i][0]=a[i][1]=-1;
42     int n;
43     cin>>n;
44     for(int i=0;i<n;++i){
45         char x;
46         cin.ignore();
47         cin>>x;
48         cin.ignore();
49         if(x!=-)
50             a[i][1]=x-0,vis[x-0]=1;
51         char y;
52         cin>>y;
53         if(y!=-)
54             a[i][0]=y-0,vis[y-0]=1;
55     }
56     int root=0;
57     for(int i=0;i<n;++i)
58         if(!vis[i])
59             root=i;
60     bfs(root);
61     cout<<"\n";
62     dfs(root);
63     return 0;
64 }

 

【PAT甲级】1102 Invert a Binary Tree (25 分)(层次遍历和中序遍历)

原文:https://www.cnblogs.com/ldudxy/p/11972744.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!