#include<iostream>
#include<unordered_map>
#include<vector>
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<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;
}