zoukankan      html  css  js  c++  java
  • 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

     已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。

    输入

     输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。

    输出

    每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列

    示例输入

    2
    abdegcf
    dbgeafc
    xnliu
    lnixu

    示例输出

    dgebfca
    abcdefg
    linux
    xnuli

    借鉴的代码:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct tree
    {
        char data;
        struct tree *l,*r;
    }BinTree;
    BinTree *creat(char *pre, char *in, int len)
    {
        int k;
        if(len<=0)
            return NULL;
        BinTree *head;
        head=(BinTree*)malloc(sizeof(BinTree));
        head->data=*pre;
        char *p;
        for(p=in;p!=NULL;p++)
            if(*p==*pre)
                break;// 在中序遍历的序列中得到与先序相同的节点
        k=p-in;
        head->l=creat(pre+1,in,k);//递归得到左子树
        head->r=creat(pre+k+1,p+1,len-k-1);//得到右子树
        return head;
    }
    void postorder(BinTree *t)
    {
        if(t)
        {
            postorder(t->l);
            postorder(t->r);
            printf("%c",t->data);
        }
    }
    void lorder(BinTree *t)
    {
        int front=0,rear=1;
        BinTree *q[100];
        q[0]=t;
        while(front<rear)
        {
            if(q[front])
            {
                printf("%c",q[front]->data);
                q[rear++]=q[front]->l;
                q[rear++]=q[front]->r;
                front++;
            }
            else
                front++;
        }
    }
    int main()
    {
        int t,len;
        char pre[101],in[101];
        BinTree *root;
        root = (BinTree *)malloc(sizeof(BinTree));
        scanf("%d",&t);
        getchar();
        while(t--)
        {
            scanf("%s %s",pre,in);
            len = strlen(pre);
            root = creat(pre,in,len);
            postorder(root);
            printf("
    ");
            lorder(root);
            printf("
    ");
        }
        return 0;
    }
    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    Nginx使用GeoIP模块来限制地区访问
    CenTOS7使用ACL控制目录权限,只给某个用户访问特定目录
    CentOS配置服务开机自启
    设置普通用户输入sudo,免密进入root账户
    Centos安装git并配置ssh
    ThreadLocal线程隔离
    Spring cloud 超时配置总结
    Hystrix超时测试
    mysql limit分页查询效率比拼
    linux CPU100%异常排查
  • 原文地址:https://www.cnblogs.com/6bing/p/4116488.html
Copyright © 2011-2022 走看看