首页 > 其他 > 详细

【Luogu】【关卡2-14】 树形数据结构(2017年10月)

时间:2017-10-09 23:52:24      阅读:376      评论:0      收藏:0      [点我收藏+]

任务说明:由一个根节点分叉,越分越多,就成了树。树可以表示数据之间的从属关系

P1087 FBI树

给一个01字符串,0对应B,1对应I,F对应既有0子节点又有1子节点的根节点,输出这棵树的后序遍历。字符串长度小于等于2^10。

心情好,写代码一次ac了

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <stack>
 5 #include <map>
 6 #include <vector>
 7 #include <string>
 8 
 9 using namespace std;
10 
11 void init(string& str) {
12     if (str.empty()) {
13         return;
14     }
15     if (str.size() == 1) {
16         if (str == "0") { cout << "B"; }
17         else if (str == "1") { cout << "I"; }
18         return;
19     }
20     string s1 = str.substr(0, str.size()/2);
21     string s2 = str.substr(str.size()/2);
22     init(s1);
23     init(s2);
24     if (str.find("0") != string::npos && str.find("1") != string::npos) {
25         cout << "F";
26     } else if (str.find("0") != string::npos) {
27         cout << "B";
28     } else {
29         cout << "I";
30     }
31     return;
32 }
33 
34 
35 int main() {
36     int n;
37     cin >> n;
38     string str;
39     cin >> str;
40     init(str);
41     cout << endl;
42     //system("pause");
43     return 0;
44 }
View Code

 

 P1030 求先序排列

给两个字符串,表示一棵树的中序遍历和后序遍历,要求输出这棵树的先序遍历。

我是模拟了这棵树,先建树,然后先序遍历的。

但是还可以有更好的解法,不用建树,直接dfs就ok!!!!

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 struct TreeNode {
 8     char val;
 9     TreeNode* left = nullptr;
10     TreeNode* right = nullptr;
11 };
12 
13 TreeNode* initTree(string& str1, string& str2) {
14     if  (str1.empty() && str2.empty()) {
15         return nullptr;
16     }
17     char c = str2[str2.size()-1];
18     TreeNode* root = new(TreeNode);
19     root->val = c;
20     int str1Pos = str1.find(c);
21     string str1Left = str1.substr(0, str1Pos);
22 
23     string str1Right = str1.substr(str1Pos + 1);
24 
25     string str2Left = str2.substr(0, str1Pos);
26 
27     string str2Right = str2.substr(str1Pos, str1Right.size());
28 
29     root->left = initTree(str1Left, str2Left);
30     root->right = initTree(str1Right, str2Right);
31     return root;
32 }
33 
34 string strans = "";
35 void visitTree(TreeNode* root) {
36     if (!root) { return; }
37     strans += root->val;
38     visitTree(root->left);
39     visitTree(root->right);
40     return;
41 }
42 
43 
44 int main() {
45     string s1, s2;
46     cin >> s1 >> s2;
47     TreeNode* root = initTree(s1, s2);
48     visitTree(root);
49     cout << strans << endl;
50     return 0;
51 }
View Code

 

新二叉树

【Luogu】【关卡2-14】 树形数据结构(2017年10月)

原文:http://www.cnblogs.com/zhangwanying/p/7643447.html

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