void Rebuild(T pre[], size_t presize, T in[], size_t insize)
{
size_t idx = 0;
_Rebuild(_root,pre,idx,presize,in,insize,0,insize);
}
void _Rebuild(Node<T>*& root, T pre[], size_t& idx, size_t presize, T in[], size_t insize, size_t left, size_t right)
{
if (left >= right || presize != insize)
return;
//在中序中找idx所在的元素
int i = left;
while (i < right)
{
if (pre[idx] == in[i])
break;
i++;
}
//没找到
if (i == right)
return;
//根为前序遍历的第一个元素
root = new Node<T>(pre[idx]);
//重建左子树
if (left < i)
_Rebuild(root->_left,pre,++idx,presize,in,insize,left,i);
//重建右子树
if (i + 1 < right)
_Rebuild(root->_right,pre,++idx,presize,in,insize,i+1,right);
}
因篇幅问题不能全部显示,请点此查看更多更全内容