首页 > 编程语言 > 详细

二叉树算法:中序、后序推导先序(数组递归实现)

时间:2015-04-27 19:50:48      阅读:237      评论:0      收藏:0      [点我收藏+]

中根序列和后根序列重建二叉树

描述

我们知道如何按照三种深度优先次序来周游一棵二叉树,来得到中根序列、前根序列和后根序列。反过来,如果给定二叉树的中根序列和后根序 列,或者给定中根序列和前根序列,可以重建一二叉树。本题输入一棵二叉树的中根序列和后根序列,要求在内存中重建二叉树,最后输出这棵二叉树的前根序列。

用不同的整数来唯一标识二叉树的每一个结点,下面的二叉树

技术分享

中根序列是9 5 32 67

后根序列9 32 67 5

前根序列5 9 67 32

先读入一个数n代表中序和后序均有n个元素。

接着输入中序序列,在输入后序序列。

输出先序序列。

输入:

4

9 5 32 67

9 32 67 5

输出:

5 9 67 32

#include <stdio.h>
#include <string.h>

void build(int len, int *s1, int *s2, int *s)
{
    int p;
    int i;
    if(len<=0)
        return;
    else{
        for(i=0; i<len; i++){
            if(s1[i]==s2[len-1]){
                p = i;
            }
        }
        build(p, s1, s2, s+1);
        build(len-p-1, s1+p+1, s2+p, s+p+1);
        s[0] = s2[len-1];
    }
}

int main()
{
    int i;

    int s1[1000], s2[1000], s3[1000];
    int n;
    while(scanf("%d", &n)!=EOF)
    {
        for(i=0; i<n; i++){
            scanf("%d", &s1[i] );
        }
        for(i=0; i<n; i++){
            scanf("%d", &s2[i] );
        }
        build(n, s1, s2, s3 );

        for(i=0; i<n; i++){
            printf("%d%c", s3[i], i==n-1?‘\n‘:‘ ‘ );
        }
    }
    return 0;
}

 

二叉树算法:中序、后序推导先序(数组递归实现)

原文:http://www.cnblogs.com/yspworld/p/4460986.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!