#include "stdafx.h"
#include <assert.h>
struct Node
{
Node * left;
Node * right;
char value;
};
void Rebuild(char * pPreOrder, char * pInOrder, int nTreeLen, Node ** root)
{
assert(pPreOrder);
assert(pInOrder);
if(*root == NULL)
{
*root = new Node();
(*root)->left = NULL;
(*root)->right = NULL;
(*root)->value = *pPreOrder;
}
if(nTreeLen == 1)
return;
char * pOrgInOrder = pInOrder;
int nLeftLen = 0;
while(*pPreOrder != *pOrgInOrder)
{
if(pPreOrder == NULL || pOrgInOrder == NULL)
return;
nLeftLen++;
pOrgInOrder++;
}
int nRightLen = nTreeLen - nLeftLen - 1;
if(nLeftLen > 0)
Rebuild(pPreOrder+1, pInOrder, nLeftLen, &((*root)->left));
if(nRightLen > 0)
Rebuild(pPreOrder+nLeftLen+1, pInOrder+nLeftLen+1, nRightLen, &((*root)->right));
}
int _tmain(int argc, _TCHAR* argv[])
{
char pre[7] = "abdcef";
char in[7] = "dbaecf";
Node * root = NULL;
Rebuild(pre,in,6,&root);
return 0;
}