许诺 • 7天前
#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* buildTree(string inorder, string levelorder) {
if (levelorder.empty()) return nullptr;
char rootVal = levelorder[0];
TreeNode* root = new TreeNode(rootVal);
size_t rootPos = inorder.find(rootVal);
string leftInorder = inorder.substr(0, rootPos);
string rightInorder = inorder.substr(rootPos + 1);
unordered_map<char, bool> inLeft;
for (char c : leftInorder) {
inLeft[c] = true;
}
string leftLevelorder, rightLevelorder;
for (size_t i = 1; i < levelorder.size(); ++i) {
char c = levelorder[i];
if (inLeft.count(c)) {
leftLevelorder += c;
} else {
rightLevelorder += c;
}
}
root->left = buildTree(leftInorder, leftLevelorder);
root->right = buildTree(rightInorder, rightLevelorder);
return root;
}
void preorder(TreeNode* root, string& res) {
if (!root) return;
res += root->val;
preorder(root->left, res);
preorder(root->right, res);
}
int main() {
string inorder, levelorder;
cin >> inorder >> levelorder;
TreeNode* root = buildTree(inorder, levelorder);
string res;
preorder(root, res);
cout << res << endl;
return 0;
}
评论:
请先登录,才能进行评论