zoukankan      html  css  js  c++  java
  • 6.3.3 二叉树重建【算法入门经典】【双十一大礼包】

    输入一棵二叉树的先序遍历和中序遍历,输出它的后序遍历序列。

    运行如图

    目前还有一些细节没有懂,不过不影响我仍然喜欢学习的心情~

    #include<stdio.h>
    #include<string.h>
    #define N 1000
    char s1[N],s2[N],ans[N];
    //s1是先序遍历,s2是中序遍历 
    void build(int n,char *s1,char *s2,char *s)
    {//构造长度为n的后续遍历。 
        if(n <= 0)    return;
        int p = strchr(s2,s1[0])-s2;//找到根结点在中序遍历中的位置 
        build(p,s1+1,s2,s);//递归构造左子树的后续遍历 
        build(n-p-1,s1+1+p,s2+1+p,s+p);//递归构造右子树的后续遍历 
        s[n-1] = s1[0];//把根结点添加到最后
        return;
     } 
    int main()
    {
        while(scanf("%s%s",s1,s2)!=EOF)
        {
            int n = strlen(s1);
            build(n,s1,s2,ans);
            ans[n] = '';//ans存储后续遍历序列 
            printf("%s
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    周总结9
    TDtree冲刺第十天
    规划极限编程阅读笔记03
    TDtree冲刺第九天
    TDtree第八天
    规划极限编程阅读笔记02
    TDtree冲刺第七天
    周总结8
    TDtree冲刺第六天
    11/1
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7818621.html
Copyright © 2011-2022 走看看