所以,我为 leetcode 上的给定问题编写了这段代码,以根据给定的前序和中序遍历构造一个二叉树。它在单独测试测试用例时运行良好,但在为我测试的相同输入提交时显示运行时错误。
class Solution {
public:
int Search(vector<int> arr,int start, int end, int key){
for(int i= start; i<= end; i++){
if(arr[i]== key)
return i;
}
return -1;
}
TreeNode* solution(vector<int>& preorder, vector<int>& inorder, int inorderStart, int inorderEnd){
static int preorderIdx = 0;
if(inorderStart> inorderEnd)
return NULL;
int data= preorder[preorderIdx];
preorderIdx++;
TreeNode* node= new TreeNode(data);
if(inorderStart== inorderEnd)
return node;
int idx= Search(inorder,inorderStart, inorderEnd, data);
node->left= solution(preorder, inorder, inorderStart, idx-1);
node->right= solution(preorder, inorder, idx+ 1, inorderEnd);
return node;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n= inorder.size();
return solution(preorder, inorder, 0, n-1);
}
};