重建二叉树

来源:互联网 发布:安装python没有idle 编辑:程序博客网 时间:2024/05/01 02:10
题目描述:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。

重建二叉树算法:
bool ReBuildBiTree(BiNode **root, int *preorder, int *inorder, int len){   if (preorder == NULL || inorder == NULL)   {     return false;   }      BiNode *pTmp = new BiNode;   pTmp->data = *preorder;   pTmp->lchild = NULL;   pTmp->rchild = NULL;      if (*root == NULL)   {      *root = pTmp;   }      if (len == 0)   {     if (*preorder == *inorder)       return true;     else       return false;   }   int *pRootIn = inorder;   int lchild_len = 0;   int rchild_len = 0;   while(lchild_len <= len)   {      if (*pRootIn == *preorder)      {         break;      }      ++pRootIn;      ++lchild_len;   }   if (lchild_len > len)   {      return false;   }   rchild_len = len - lchild_len - 1;       if (lchild_len > 0)   {      if(!ReBuildBiTree(&(*root)->lchild, preorder + 1, inorder, lchild_len))         return false;   }      if (rchild_len > 0)   { if(!ReBuildBiTree(&(*root)->rchild, preorder + lchild_len + 1, inorder + lchild_len + 1, rchild_len))     return false;    }   return true;}


原创粉丝点击