
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;
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);
}