</pre><pre name="code" class="cpp">
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
//return Helper(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
return buildTreeMy(preorder, inorder, 0, preorder.size() - 1, 0, inorder.size() - 1);
}
TreeNode* buildTreeMy(vector<int>& preorder, vector<int>& inorder, int startPre, int endPre, int startIno, int endIno)
{
TreeNode* root = new TreeNode(preorder[startPre]);
int i = 0;
int leftLength = 0;
int rightLength = 0;
if(startPre > endPre)
return NULL;
if (startPre == endPre)
{
return root;
}
int val = preorder[startPre]; // root value
for (i = startIno; i <= endIno; i++)
{
if (inorder[i] == val)
{
leftLength = i - startIno;
break;
}
}
if (leftLength >0)
{
root->left = buildTreeMy(preorder, inorder, startPre + 1, startPre + leftLength, startIno, startIno + leftLength - 1);
}
rightLength = endPre - startPre - leftLength;
if (rightLength>0)
{
root->right = buildTreeMy(preorder, inorder, startPre + leftLength + 1, endPre, startIno + leftLength + 1, endIno);
}
return root;
}
</pre><p>以上这段代码在LeeCODE上运行显示超时</p><p><pre name="code" class="cpp">TreeNode* buildTreeMy(vector<int>& preorder, vector<int>& inorder, int startPre, int endPre, int startIno, int endIno)
{
int i = 0;
int leftLength = 0;
int rightLength = 0;
if(startPre > endPre)
return NULL;
if (startPre == endPre)
{
return new TreeNode(preorder[startPre]);
}
TreeNode* root = new TreeNode(preorder[startPre]);
int val = preorder[startPre]; // root value
for (i = startIno; i <= endIno; i++)
{
if (inorder[i] == val)
{
leftLength = i - startIno;
break;
}
}
if (leftLength >0)
{
root->left = buildTreeMy(preorder, inorder, startPre + 1, startPre + leftLength, startIno, startIno + leftLength - 1);
}
rightLength = endPre - startPre - leftLength;
if (rightLength>0)
{
root->right = buildTreeMy(preorder, inorder, startPre + leftLength + 1, endPre, startIno + leftLength + 1, endIno);
}
return root;
}
采用该代码正常提交。
没想明白什么原因。