C++语言: Codee#25888
001 /*
002 +++++++++++++++++++++++++++++++++++++++
003 author: chm
004 +++++++++++++++++++++++++++++++++++++++
005 */
006
007 #include <map>
008 #include <set>
009 #include <list>
010 #include <queue>
011 #include <cmath>
012 #include <stack>
013 #include <bitset>
014 #include <cstdio>
015 #include <cctype>
016 #include <string>
017 #include <vector>
018 #include <cassert>
019 #include <cstdlib>
020 #include <cstring>
021 #include <fstream>
022 #include <sstream>
023 #include <iomanip>
024 #include <iostream>
025 #include <algorithm>
026
027 using namespace std;
028
029 FILE* fin = stdin;
030 FILE* fout = stdout;
031 const int max_size = 100;
032 typedef struct treenode
033 {
034 int num;
035 struct treenode* left;
036 struct treenode* right;
037 } BTNode;
038
039
040 int postorder[max_size], inorder[max_size];
041 BTNode* CreateBT(int* post, int* in, int n, int m)
042 {
043 BTNode* s;
044 int* p;
045 int* q;
046 int* maxp;
047 int maxpost;
048 int maxin;
049 int k;
050
051 if(n <= 0)
052 return NULL;
053 maxpost = -1;
054 for(p = in; p < in + n; ++p)
055 for(q = post; q < post + m; ++q)
056 if(*p == *q)
057 {
058 k = q - post;
059 if(k > maxpost)
060 {
061 maxpost = k;
062 maxp = p;
063 maxin = p - in;
064 }
065 }
066 s = (BTNode* )malloc(sizeof(BTNode));
067 s->num = post[maxpost];
068 s->left = CreateBT(post, in, maxin, m);
069 s->right = CreateBT(post, maxp + 1, n - maxin - 1, m);
070
071 return s;
072 }
073
074 #define ONLINE_JUDGE
075 int main()
076 {
077 #ifndef ONLINE_JUDGE
078 freopen("d:\\in.txt", "r", stdin);
079 freopen("d:\\out.txt", "w", stdout);
080 #endif
081 int n;
082 scanf("%d", &n);
083 for(int i = 0; i < n; ++i)
084 scanf("%d", &postorder[i]);
085 for(int i = 0; i < n; ++i)
086 scanf("%d", &inorder[i]);
087 BTNode* root = CreateBT(postorder, inorder, n, n);
088 queue<BTNode*> treeque;
089 treeque.push(root);
090 while(!treeque.empty())
091 {
092 BTNode* tmp = treeque.front();
093 treeque.pop();
094 printf("%d", tmp->num);
095 if(NULL != tmp->left)
096 treeque.push(tmp->left);
097 if(NULL != tmp->right)
098 treeque.push(tmp->right);
099 printf("%s", treeque.empty() ? "\n" : " ");
100 }
101
102 #ifndef ONLINE_JUDGE
103 fclose(stdout);
104 system("start d:\\check.exe d:\\out.txt d:\\ans.txt");
105 #endif
106 return 0;
107 }
002 +++++++++++++++++++++++++++++++++++++++
003 author: chm
004 +++++++++++++++++++++++++++++++++++++++
005 */
006
007 #include <map>
008 #include <set>
009 #include <list>
010 #include <queue>
011 #include <cmath>
012 #include <stack>
013 #include <bitset>
014 #include <cstdio>
015 #include <cctype>
016 #include <string>
017 #include <vector>
018 #include <cassert>
019 #include <cstdlib>
020 #include <cstring>
021 #include <fstream>
022 #include <sstream>
023 #include <iomanip>
024 #include <iostream>
025 #include <algorithm>
026
027 using namespace std;
028
029 FILE* fin = stdin;
030 FILE* fout = stdout;
031 const int max_size = 100;
032 typedef struct treenode
033 {
034 int num;
035 struct treenode* left;
036 struct treenode* right;
037 } BTNode;
038
039
040 int postorder[max_size], inorder[max_size];
041 BTNode* CreateBT(int* post, int* in, int n, int m)
042 {
043 BTNode* s;
044 int* p;
045 int* q;
046 int* maxp;
047 int maxpost;
048 int maxin;
049 int k;
050
051 if(n <= 0)
052 return NULL;
053 maxpost = -1;
054 for(p = in; p < in + n; ++p)
055 for(q = post; q < post + m; ++q)
056 if(*p == *q)
057 {
058 k = q - post;
059 if(k > maxpost)
060 {
061 maxpost = k;
062 maxp = p;
063 maxin = p - in;
064 }
065 }
066 s = (BTNode* )malloc(sizeof(BTNode));
067 s->num = post[maxpost];
068 s->left = CreateBT(post, in, maxin, m);
069 s->right = CreateBT(post, maxp + 1, n - maxin - 1, m);
070
071 return s;
072 }
073
074 #define ONLINE_JUDGE
075 int main()
076 {
077 #ifndef ONLINE_JUDGE
078 freopen("d:\\in.txt", "r", stdin);
079 freopen("d:\\out.txt", "w", stdout);
080 #endif
081 int n;
082 scanf("%d", &n);
083 for(int i = 0; i < n; ++i)
084 scanf("%d", &postorder[i]);
085 for(int i = 0; i < n; ++i)
086 scanf("%d", &inorder[i]);
087 BTNode* root = CreateBT(postorder, inorder, n, n);
088 queue<BTNode*> treeque;
089 treeque.push(root);
090 while(!treeque.empty())
091 {
092 BTNode* tmp = treeque.front();
093 treeque.pop();
094 printf("%d", tmp->num);
095 if(NULL != tmp->left)
096 treeque.push(tmp->left);
097 if(NULL != tmp->right)
098 treeque.push(tmp->right);
099 printf("%s", treeque.empty() ? "\n" : " ");
100 }
101
102 #ifndef ONLINE_JUDGE
103 fclose(stdout);
104 system("start d:\\check.exe d:\\out.txt d:\\ans.txt");
105 #endif
106 return 0;
107 }
编辑器加载中...