二叉树重建(先序+中序)
来源:互联网 发布:js获取第二个子元素 编辑:程序博客网 时间:2024/06/07 02:29
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);}