1206还原二叉树2

1206还原二叉树2

  • 描述: PIPI现在有两个序列,分别为二叉树的中序序列和二叉树的后序序列,他想由这两个序列还原二叉树,你能帮PIPI还原吗?

  • 输入:第一行输入序列的长度n (0 第二行输入二叉树的中序序列。
    第三行输入二叉树的后序序列。

  • 输出:输出二叉树的先序遍历序列。

  • 输入示例

    3
    2 1 3
    2 3 1
    
  • 输出示例

    1 2 3
    
  • 代码块

    #include 
    using namespace std;typedef struct BiTNode{int data;struct BiTNode *lchild, *rchild;
    }BiTNode, *BiTree;BiTNode *BuildTree(){int data;scanf("%d", &data);if(data == -1)return NULL;BiTNode *p = (BiTNode *)malloc(sizeof(BiTNode));p->data = data;p->lchild = BuildTree();p->rchild = BuildTree();return p;
    }BiTree CreateBiTreeByInAndPost(int in[], int post[], int inf, int inl, int postf, int postl){if(inf > inl || postf > postl) return NULL;BiTNode *p = (BiTNode *)malloc(sizeof(BiTNode));p->data = post[postl];int i;for(i = inf; i <= inl; i++){if(in[i] == post[postl]) break;}p->lchild = CreateBiTreeByInAndPost(in, post, inf, i-1, postf, i-inf+postf-1);p->rchild = CreateBiTreeByInAndPost(in, post, i+1, inl, i-inf+postf, postl-1);return p;
    }void PreOrder(BiTree T){if(!T) return;printf("%d ", T->data);PreOrder(T->lchild);PreOrder(T->rchild);
    }int main(){int n;scanf("%d", &n);int in[105], post[105];for(int i=0; i<n; i++)scanf("%d", &in[i]);for(int i=0; i<n; i++)scanf("%d", &post[i]);BiTree T = CreateBiTreeByInAndPost(in, post, 0, n-1, 0, n-1);PreOrder(T);system("pause");return 0;
    }
    


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部