AC

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

}


评论:

请先登录,才能进行评论