Search in inorder vector to find the next root->right, root->left index which is being used to set the border for next recursion in preorder border.
// you may assume that there is no duplicates in the tree.
buildTree(vector<int>& preorder, vector<int>& inorder, TreeNode* root, int index, int nStart, int nEnd) {
if(nStart >= nEnd) return;
int num = preorder[index];
root = new TreeNode(num);
int r = start;
while(r < nEnd && inorder[r] != num) {r++;}
if(r < nEnd) buildTree(preorder, inorder, root->left, index + 1, nStart, r);
if(nEnd > r + 1) buildTree(preorder, inorder, root->right, index + r + 1 - nStart, r + 1, nEnd);
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* root = NULL;
int nSize = preorder.size();
buildTree(preorder, inorder, root, 0, 0, nSize);
return root;
}
本文详细介绍了如何使用中序遍历与前序遍历构建二叉树,包括递归算法实现及关键步骤解析。
3499

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



