❤ • 1个月前
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
char val;
int sum = 0;
TreeNode *left, *right;
TreeNode(char x): val(x), sum(0), left(nullptr), right(nullptr) {
}
};
TreeNode *buildTree(string s1, string s2) {
if (s1.size() == 0 || s2.size() == 0)
return nullptr;
char value = s1[0];
TreeNode *root = new TreeNode(value);
int rootpos = s2.find(value);
root->left = buildTree(s1.substr(1, rootpos), s2.substr(0, rootpos));
root->right = buildTree(s1.substr(1 + rootpos), s2.substr(1 + rootpos));
return root;
}
void dfs(TreeNode *root) {
if (!root)
return;
dfs(root->left);
dfs(root->right);
if (!root->left && !root->right) {
root->sum = 1;
return;
}
if (root->left)
root->sum += root->left->sum;
if (root->right)
root->sum += root->right->sum;
}
void ffind(TreeNode *root) {
if (!root)
return;
for (int i = 1; i <= root->sum; i++) {
cout << root->val;
}
cout << endl;
ffind(root->left);
ffind(root->right);
}
int main() {
string s1, s2;
cin >> s1 >> s2;
TreeNode *root = buildTree(s1, s2);
dfs(root);
ffind(root);
return 0;
}
评论:
请先登录,才能进行评论