二叉树建树



  • 给一棵树的先序遍历s1和中序遍历s2,求它的后序遍历(这里假设节点都是字母表示)

    思路:先序遍历提供每一棵子树的根结点,利用中序遍历找出左子树,同时即可得到右子树,然后递归两子树,最后输出根结点,即可得到后序遍历

    #include<iostream>
    #include<cstdio>
    #include<cstring>
     
    using namespace std;
     
    #define MAX ***
    
    void build(int len,char* s1,char* s2)
    {
        if(len<=0)
            return;
        int p=strchr(s2,s1[0])-s2;
        build(p,s1+1,s2);
        build(len-p-1,s1+p+1,s2+p+1);
        printf("%c",s1[0]);
    }
     
     
    int main()
    {
        char s1[MAX],s2[MAX];
        while(scanf("%s %s",s1,s2)!=EOF)
        {
            int len=strlen(s1);
            build(len,s1,s2);
            printf("\n");
        }
        return 0;
    }
     
    

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待