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
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    观察者模式(Observer)
    怎样解决Java Web项目更改项目名后报错
    MAVEN最佳实践:模块划分
    java.lang.OutOfMemoryError: PermGen space及其解决方法
    以Windows服务方式启动MySQL,并将其默认编码设置为UTF-8
    ubuntu 12.04和Windows 7双系统的安装方法
    允许ubuntu下mysql远程连接
    Linux 系统目录介绍
    SVN中图标符号的含义
    简单介绍Linux下安装Tomcat的步骤
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083954.html
Copyright © 2011-2022 走看看