其中键值对的建立最为关键,不熟悉unorder_maphttps://blog.csdn.net/zou_albert/article/details/106983268?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169528103016800211567279%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169528103016800211567279&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-106983268-null-null.142^v94^insert_down28v1&utm_term=unordered_map&spm=1018.2226.3001.4187的同学,可以查看链接这篇文章,
- #include
- #include
- #include
- using namespace std;
- //节点结构体
- struct treenode {
- char val;
- treenode* left;
- treenode* right;
- treenode(char val) :val(val), left(nullptr), right(nullptr) {}//此处{},和char val不能忘记了
- };
-
- //建立二叉树
- treenode* buildtree(unordered_map<char, pair<char,char>>& nodemap, char rootvalue)//需要参数:键值对,根节点
- {
- if (rootvalue == '0')
- return nullptr;
- treenode* root = new treenode(rootvalue);
- char leftchild = nodemap[rootvalue].first;
- char rightchild= nodemap[rootvalue].second;
- root->left = buildtree(nodemap, leftchild);
- root->right = buildtree(nodemap, rightchild);
- return root;
- }
-
-
-
- void pretree(treenode* root)
- {
- if (root == nullptr)
- {
- return;
- }
- cout << root->val;
- pretree(root->left);
- pretree(root->right);
- }
- void midtree(treenode* root)
- {
- if (root == nullptr)
- {
- return;
- }
- midtree(root->left);
- cout << root->val;
- midtree(root->right);
- }
- void posttree(treenode* root)
- {
- if (root == nullptr)
- {
- return;
- }
- posttree(root->left);
- posttree(root->right);
- cout << root->val;
- }
- int main()
- {
- int n;
- cin >> n;
- unordered_map<char, pair<char, char>> nodemap;//将键类型与值进行映射,建立的无序哈希表
- vector<char>index(n+1, '0');//这是节点的字母,n+1维,因为题目中F的下标是从1开始计算的,数组同样
- vector
int>>num(n + 1, vector<int>(2,0));//这是建立了n+1维,2列的数组进行存储 - for (int i = 1; i <= n; i++)
- {
- cin >> index[i] >> num[i][0] >> num[i][1];
- }
- //生成键值对的nodemap
- for (int i = 1; i <= n; i++)
- {
- nodemap[index[i]] = make_pair(index[num[i][0]], index[num[i][1]]);//此处最应该注意,我在敲的时候忘记了加上index索引
- }
-
- //建立二叉树
- treenode* root = buildtree(nodemap, index[1]);
- pretree(root);
- cout << endl;
- midtree(root);
- cout << endl;
- posttree(root);
- cout << endl;
- return 0;
- }