许诺 • 17天前
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* buildTree(string& inorder, string& postorder, int inStart, int inEnd, int postStart, int postEnd, unordered_map<char, int>& inMap) {
if (inStart > inEnd || postStart > postEnd) {
return nullptr;
}
char rootVal = postorder[postEnd];
TreeNode* root = new TreeNode(rootVal);
int inRoot = inMap[rootVal];
int leftSubtreeSize = inRoot - inStart;
root->left = buildTree(inorder, postorder, inStart, inRoot - 1, postStart, postStart + leftSubtreeSize - 1, inMap);
root->right = buildTree(inorder, postorder, inRoot + 1, inEnd, postStart + leftSubtreeSize, postEnd - 1, inMap);
return root;
}
void preorder(TreeNode* root, int& count, int& sum) {
if (root == nullptr) {
return;
}
count++;
if (count % 2 == 1) {
sum += root->val - '0';
}
preorder(root->left, count, sum);
preorder(root->right, count, sum);
}
int main() {
string inorder, postorder;
cin >> inorder >> postorder;
unordered_map<char, int> inMap;
for (int i = 0; i < inorder.size(); ++i) {
inMap[inorder[i]] = i;
}
TreeNode* root = buildTree(inorder, postorder, 0, inorder.size() - 1, 0, postorder.size() - 1, inMap);
int count = 0;
int sum = 0;
preorder(root, count, sum);
cout << sum << endl;
return 0;
}
评论:
请先登录,才能进行评论