The most important thing is to find the correct index.
void build(vector<int>& postorder, vector<int>& inorder, int index, int begin, int end, TreeNode*& root) {
if(begin >= end) return;
int n = postorder.size();
int val = postorder[index];
root = new TreeNode(val);
int i = 0;
while(i < n && inorder[i] != val) {i++;}
if(i > 0) build(postorder, inorder, i + index - end, begin, i, root->left);
if(i < n - 1) build(postorder, inorder, index - 1, i + 1, end, root->right);
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
TreeNode* root = NULL;
build(postorder, inorder, postorder.size() - 1, 0, postorder.size(), root);
return root;
}
本文介绍了一种通过中序遍历和后序遍历构建二叉树的算法。该算法首先找到根节点,并递归地构建左右子树。关键在于正确确定每个子树的索引范围。
334

被折叠的 条评论
为什么被折叠?



