AC

许诺  •  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;

}


评论:

请先登录,才能进行评论