void Rebuild(char *pPreOrder , char *pInOrder , Node **pRoot , int nTreeLen) { int nLeftLen , nRightLen; char *pLeftEnd; Node *p; //边界条件检查 if(!pPreOrder || !pInOrder || !pRoot) return; if(!(p = (Node *)malloc(sizeof(Node)))) return; p->chValue = *pPreOrder; p->lChild = p->rChild = NULL; *pRoot = p; if(nTreeLen == 1) return; //划分左右子数 pLeftEnd = pInOrder; while(*pLeftEnd != *pPreOrder) pLeftEnd++; nLeftLen = (int)(pLeftEnd - pInOrder); nRightLen = nTreeLen - nLeftLen - 1; if(nLeftLen) Rebuild(pPreOrder + 1 , pInOrder , &(p->lChild) , nLeftLen); if(nRightLen) Rebuild(pPreOrder + nLeftLen + 1, pInOrder + nLeftLen + 1 , &(p->rChild) , nRightLen); }
二叉树重建(先序+中序)
最新推荐文章于 2023-08-26 20:53:24 发布