许诺 • 2天前
#include <iostream>
#include <string>
using namespace std; struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}
}; TreeNode* buildTree(string preorder, string inorder) {
if (preorder.empty() || inorder.empty()) return nullptr;
char rootVal = preorder[0];
TreeNode* root = new TreeNode(rootVal);
int rootIndex = inorder.find(rootVal);
string leftInorder = inorder.substr(0, rootIndex);
string rightInorder = inorder.substr(rootIndex + 1);
string leftPreorder = preorder.substr(1, leftInorder.size());
string rightPreorder = preorder.substr(1 + leftInorder.size());
root->left = buildTree(leftPreorder, leftInorder);
root->right = buildTree(rightPreorder, rightInorder);
return root;
} void outputTree(TreeNode* root) {
if (root == nullptr) return;
outputTree(root->left);
outputTree(root->right);
if (root->left == nullptr && root->right == nullptr) {
cout << root->val << " is a leaf" << endl;
} else {
cout << "for " << root->val << ",lchild ";
if (root->left != nullptr) {
cout << root->left->val;
} else {
cout << '#';
}
cout << ",rchild ";
if (root->right != nullptr) {
cout << root->right->val;
} else {
cout << '#';
}
cout << endl;
}
} int main() {
string preorder, inorder;
cin >> preorder >> inorder;
TreeNode* root = buildTree(preorder, inorder);
outputTree(root);
return 0;
}
评论:
请先登录,才能进行评论