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

    提示

     

    来源

    ma6174

    示例程序

     


    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int L;  
    struct node 
    {
    int data;
    struct node *rchild;
    struct node *lchild;
    };
    struct node *creat(int n,char a[],char b[])
    {
    struct node *root;
    char *p;
    if(n==0)
    {
    return NULL; //返回上一层创建二叉树函数
    }
    root = (struct node *)malloc(sizeof(struct node));
    root->data = a[0];
    for(p=b;p!='\0';p++)//在b中找到和a[0]相同的元素,跳出循环
    {
    if(*p==a[0])
    {
    break;
    }
    }
    int t=p-b; //记录b中第几个字符与a【0】相同,传参给创建二叉树函数
    root->lchild = creat(t,a+1,b);
    root->rchild = creat(n-1-t,a+t+1,p+1);
    return root;
    }
    void final(struct node *root)
    {
    if(root)  
        {  
             final(root->lchild);  
             final(root->rchild);  
             printf("%c",root->data);  
        }  
    }
    void Exbition(struct node *root)  //层次遍历输出
    {       
    int in,out;
    in = out = 0;
    struct node *p[100]; //保存数据,从根节点到叶子的数据分层保存下来
    p[in++] = root; //保存根上的元素
    while(out<in)
    {
    if(p[out]) //如果访问的结点不为空
    {
    printf("%c",p[out]->data ); //输出访问的结点元素
    p[in++] = p[out]->lchild; //将访问结点的左子树的地址传给下一个输出的节点元素
    p[in++] = p[out]->rchild;//将访问结点的右子树的地址传给下一个输出的节点元素
    }
    out++;
    }
    }
    int main()
    {
    char a[55],b[55];
    int n,m;
    struct node *root;
    while(scanf("%d",&n)!=EOF)
    {
    L=0;
    while(n--)
    {
    scanf("%s%s",a,b);
    int k=strlen(a);//记录字符串长度,传参数给创建二叉树。
    root = creat(k,a,b);
    final(root);//后序遍历输出
    printf("\n");
    Exbition(root);//层次遍历输出
    printf("\n");
    }
    }
    return 0;
    }




  • 相关阅读:
    Java实现币值最大化问题
    Java实现币值最大化问题
    Java实现币值最大化问题
    Java实现币值最大化问题
    ddd
    雷军:小米最坏的时候已过去 2017目标营收千亿(确实有些新意)
    真正的转变从不确定中来
    很多人知道自己的斤两,他之所以抱怨工资低,不是觉得薪水和自己的能力不匹配,而是因为工资确实不够用(笑死了)
    CodeSmith
    sb2-admin
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782178.html
Copyright © 2011-2022 走看看