❤ • 1个月前
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode *buildTree(const string &mid, const vector<char> &level) {
if (mid.empty() || level.empty()) {
return nullptr;
}
char rootVal = level[0];
TreeNode *root = new TreeNode(rootVal);
size_t rootpos = mid.find(rootVal);
string lmid = mid.substr(0, rootpos);
string rmid = mid.substr(rootpos + 1);
unordered_set<char> lset(lmid.begin(), lmid.end());
unordered_set<char> rset(rmid.begin(), rmid.end());
vector<char> lLevel, rLevel;
for (size_t i = 1; i < level.size(); ++i) {
if (lset.count(level[i])) {
lLevel.push_back(level[i]);
} else if (rset.count(level[i])) {
rLevel.push_back(level[i]);
}
}
root->left = buildTree(lmid, lLevel);
root->right = buildTree(rmid, rLevel);
return root;
}
void firstfind(TreeNode *root) {
if (root == nullptr) {
return;
}
cout << root->val;
firstfind(root->left);
firstfind(root->right);
}
int main() {
string mid, level;
cin >> mid >> level;
vector<char> levelVec(level.begin(), level.end());
TreeNode *root = buildTree(mid, levelVec);
string result;
firstfind(root);
return 0;
}
评论:
请先登录,才能进行评论