P1305 新二叉树
题目描述
输入一串二叉树,输出其前序遍历。
输入格式
第一行为二叉树的节点数 n n n。( 1 ≤ n ≤ 26 1 \leq n \leq 26 1≤n≤26)
后面 n n n 行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。
空节点用 *
表示
输出格式
二叉树的前序遍历。
输入输出样例 #1
输入 #1
6
abc
bdi
cj*
d**
i**
j**
输出 #1
abdicj
题解
#include <bits/stdc++.h>
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void preOrder(TreeNode* root, std::vector<char>& result) {
if(!root) return;
result.push_back(root->val + 'a');
preOrder(root->left, result);
preOrder(root->right, result);
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int N;
std::cin >> N;
std::vector<TreeNode*> T(26);
for(int i = 0; i < 26; i++) T[i] = new TreeNode(i);
std::string str;
int root_index = 0;
for(int i = 0; i < N; i++) {
std::cin >> str;
if(i == 0) root_index = str[0] - 'a';
int curNode = str[0] - 'a', left = str[1] - 'a', right = str[2] - 'a';
if(std::isalpha(str[1])) T[curNode]->left = T[left];
if(std::isalpha(str[2])) T[curNode]->right = T[right];
}
std::vector<char> result;
TreeNode* root = T[root_index];
preOrder(root, result);
for(int i = 0; i < result.size(); i++) {
if(i != result.size() - 1) std::cout << result[i];
else std::cout << result[i] << std::endl;
}
return 0;
}