題目鏈接:傳送門
思路:忘了invert是反轉的意思,然會寫了代碼對不上樣例。。這個題直接用結構體存儲二叉樹,中序直接dfs,層序直接bfs即可。
代碼:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 300;
struct node {
int data , left , right;
}tree[maxn];
int kase;
int vis[maxn];
void dfs(char u) {
if(tree[u].left != '-')dfs(tree[u].left);
if(kase > 0)cout << " ";
cout << u;
kase++;
if(tree[u].right != '-')dfs(tree[u].right);
}
void bfs(char u) {
queue <char> q;
q.push(u);
while(!q.empty()) {
char v = q.front(); q.pop();
if(kase > 0)cout << " ";
cout << v;
kase++;
if(tree[v].left != '-')q.push(tree[v].left);
if(tree[v].right != '-')q.push(tree[v].right);
}
}
int main() {
int n;
ios::sync_with_stdio(0);
cin >> n;
char root;
for(int i = 0 ; i < n ; i++) {
char b , c;
cin >> b >> c;
vis[b] = vis[c] = 1;
tree[i + '0'].right = b;
tree[i + '0'].left = c;
}
for(int i = 0 ; i < n ; i++) if(!vis[i + '0'])root = i + '0';
bfs(root);
cout << "\n";
kase = 0;
dfs(root);
cout << "\n";
return 0;
}