zoukankan      html  css  js  c++  java
  • 九度OJ 1078:二叉树遍历 (二叉树)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:3748

    解决:2263

    题目描述:

    二叉树的前序、中序、后序遍历的定义:
    前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
    中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
    后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
    给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

    输入:

    两个字符串,其长度n均小于等于26。
    第一行为前序遍历,第二行为中序遍历。
    二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。

    输出:

    输入样例可能有多组,对于每组测试样例,
    输出一行,为后序遍历的字符串。

    样例输入:
    ABC
    BAC
    FDXEAG
    XDEFAG
    样例输出:
    BCA
    XEDGAF
    来源:
    2006年清华大学计算机研究生机试真题

    思路:

    并不需要还原树,直接由前序和中序求就行。

    主要是弄清楚三种遍历的定义。


    代码:

    #include <stdio.h>
    #include <string.h>
     
    //void print(char *s, int len)
    //{
    //  for (int i=0; i<len; i++)
    //      printf("%c", s[i]);
    //  printf("
    ");
    //}
     
    void getAfter(char *b, char *m, char *a, int len)
    {
        if (len == 1)
        {
            a[0] = b[0];
            return;
        }
     
        int root = b[0];
        int i;
        for (i=0; i<len; i++)
        {
            if (m[i] == root)
                break;
        }
     
        a[len-1] = root;
        //print(b, len);
        //print(m, len);
        //print(a, len);
        if (i > 0)
            getAfter(b+1, m, a, i);
        if (len-1-i > 0)
            getAfter(b+1+i, m+1+i, a+i, len-1-i);
    }
    int main(void)
    {
        char b[30], m[30], a[30];
        int len;
        while (scanf("%s", b) != EOF)
        {
            scanf("%s", m);
     
            len = strlen(b);
            //for (int i=0; i<len; i++)
            //  a[i] = '0';
            getAfter(b, m, a, len);
            a[len] = '';
     
            printf("%s
    ", a);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1078
        User: liangrx06
        Language: C
        Result: Accepted
        Time:0 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    查看windows下指定的端口是否开放
    网易云音乐评论爬虫:爬取歌曲的全部评论
    用 Python 玩转 GitHub 的贡献板
    用python实现linux口令破解
    Python 音频数据扩充的技巧
    教你使用python+Opencv完成人脸解锁
    opencv+Python特征检测及K-最近邻匹配
    opencv+python 统计及绘制直方图
    学会用这个工具做分析,1年积累3年工作经验
    15分钟,教你用Python爬网站数据,并用BI可视化分析!
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083954.html
Copyright © 2011-2022 走看看