AC

 •  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;
}

评论:

请先登录,才能进行评论