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