PAT A 1102. Invert a Binary Tree (25)

来源:互联网 发布:jenkins python pdf 编辑:程序博客网 时间:2024/06/05 18:30
用静态链表建树,然后只要交换两个元素的值就反转了。
#include <cstdio>#include <string>#include <vector>#include <algorithm>#include <queue>#include <iostream>using namespace std;vector<int> child[11],bfs,infs;bool root[11]={false};queue<int> Q;void invert(const int &n){for(int i=0;i<n;++i){swap(child[i][0],child[i][1]);}}void BFS(const int &root){Q.push(root);while(!Q.empty()){int q=Q.front();Q.pop();bfs.push_back(q);if(child[q][0]!=-1)Q.push(child[q][0]);if(child[q][1]!=-1)Q.push(child[q][1]);}}void INFS(const int &root){if(root!=-1){INFS(child[root][0]);infs.push_back(root);INFS(child[root][1]);}}int find_root(const int &n){for(int i=0;i<n;++i)if(!root[i])return i;}int main(void){//freopen("in.log","r",stdin);int n;cin>>n;for(int i=0;i<n;++i){string tmpl,tmpr;cin>>tmpl>>tmpr;if(tmpl!="-"){int l=stoi(tmpl);child[i].push_back(l);root[l]=true;}else{child[i].push_back(-1);}if(tmpr!="-"){int r=stoi(tmpr);child[i].push_back(r);root[r]=true;}else{child[i].push_back(-1);}}invert(n);int btree=find_root(n);BFS(btree);INFS(btree);int i=0;for(int c:bfs){(i++)?cout<<" "<<c:cout<<c;}cout<<endl;int j=0;for(int c:infs){(j++)?cout<<" "<<c:cout<<c;}cout<<endl;return 0;}

原创粉丝点击