jQuery火箭图标返回顶部代码

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

 

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

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

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

Input

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

Output

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

Sample Input

2
abdegcf
dbgeafc
xnliu
lnixu

Sample Output

dgebfca
abcdefg
linux
xnuli

提示:本题用到了还原二叉树的知识点,即通过前序+中序来还原二叉树,从而输出它的后序遍历和层序遍历。

代码实现如下(g++):
#include <bits/stdc++.h>

using namespace std;

typedef struct node
{
    char data;
    struct node *left;
    struct node *right;
} node;//typedef定义struct node结构体

node *create(int n,char *a,char *b)
{
    node *root;
    char *p;//定义一个指针,用来查找b数组
    if(n==0)
        return NULL;//如果n==0,即长度为空,不存在
    root=(node *)malloc(sizeof(node));//申请空间
    root->data=a[0];//注意a数组是前序遍历,所以它的第一个元素必定是该树的根节点
    for(p=b; p!='\0'; p++)
    {
        if(*p==a[0])//一步步找b数组中a[0]的位置,找到位置记下来
            break;
    }
    int t=p-b;//左子树长度为p-b
    root->left=create(t,a+1,b);//三个变量分别为左子树长度,指向a的下一位,指向b
    root->right=create(n-t-1,a+t+1,p+1);//三个变量分别为右子树长度,指向a+左子树长度+根节点长度,指向p的下一位
    return root;
}

void housort(node *root)//后序遍历
{
    if(root)
    {
    housort(root->left);//遍历左儿子
    housort(root->right);//遍历右儿子
    cout<<root->data;//遍历根节点,输出根节点
    }
}

void cengci(node *root)//层序遍历,需要用到队列
{
    queue<node *>t;
    t.push(root);
    while(!t.empty())
    {
        root=t.front();
        t.pop();
        if(root)
        {
            cout<<root->data;
            t.push(root->left);
            t.push(root->right);//将左右节点依次进队,先进先出,很好理解
        }
    }
}

int main()
{
    char a[55],b[55];
    int n;
    while(~scanf("%d",&n))
    {
        node *root;
        scanf("%s",a);
        scanf("%s",b);
        n=strlen(a);
        root=create(n,a,b);
        housort(root);
        printf("\n");
        cengci(root);
        printf("\n");
    }
    return 0;
}


/***************************************************
Result: Accepted
Take time: 0ms
Take Memory: 200KB
****************************************************/

 

posted @ 2018-08-18 21:00  孑丶然  阅读(351)  评论(0编辑  收藏  举报
Live2D