已知一棵二叉树的前序和中序遍历

作者:澳门娱乐

1029

遍历问题

澳门娱乐6165,1029 遍历难点

 时限: 1 s

 空间范围: 12捌仟KB

 标题等第 : 钻石 Diamond

主题材料陈述 Description

    大家都很熟习二叉树的前序、中序、后序遍历,在数据结构中常提议如此的主题素材:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历体系你也能求出它的前序遍历。然则给定一棵二叉树的前序和后序,你却不可能明确里面序遍历体系,思量如下图中的几棵二叉树:

 

    全部那一个二叉树都持有同样的前序遍历和后序遍历,但中序遍历却区别。

澳门娱乐6165 1

输入描述 Input Description

    输入文件共2行,第一行代表该树的前序遍历结果,第二行表示该树的后序遍历结果。输入的字符会集为{a-z},长度不超越26。

出口描述 Output Description

    输出文件只满含三个不当先长整型的大背头,表示大概的中序遍历系列的总量。

样例输入 萨姆ple Input

abc

cba

样例输出 Sample Output

4

思路

唯有二个外甥 的节点 才会在精通 前序后序 的情况下有区别的中序遍历,所以将标题转化成找 唯有多个幼子的节点个数。

能够很轻松的寻觅那类节点在前序后序中冒出的规律。(前序中现身AB,后序中出现BA,则那几个节点独有多个幼子)

各样那类节点有三种中序遍历(及幼子在左,孙子在右)依照乘法原理中序遍历数为 2^节点个数 种

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char qian[30];
char hou[30];
int ans=0;
int main()
{
    scanf("%s%s",qian,hou);
    for(int i=0;i<=strlen(qian)-1;i++)
        for(int j=1;j<=strlen(hou)-1;j++)
            if(qian[i]==hou[j]&&qian[i+1]==hou[j-1])
                ans++;
    printf("%d",1<<ans);
}

2010

求后序遍历

二〇〇八 求后序遍历

 

 时限: 1 s

 空间限制: 6陆仟KB

 标题等第 : 白金Silver

 

 

 

标题讲述 Description

输入一棵二叉树的先序和中序遍历体系,输出其后序遍历种类。

输入描述 Input Description

 

共两行,第一行叁个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

出口描述 Output Description

仅一行,表示树的后序遍历系列。

样例输入 Sample Input

abdehicfg

dbheiafcg

样例输出 Sample Output

dhiebfgca

多少范围及指示 Data Size & Hint

输入长度不赶过255。

代码

#include<iostream>
using namespace std;
int len;
string s1,s2;
void dfs(int s,int l,int r)
{
    if(l==r)return;
    int pos=l;
    for(int i=l;i<=r;i++)if(s1[s]==s2[i]){pos=i;break;}
    dfs(s+1,l,pos);
    dfs(s+pos-l+1,pos+1,r);
    cout<<s1[s];
}
int main()
{
    cin>>s1>>s2;
    len=s1.length();
    dfs(0,0,len);
}

3143

二叉树的序遍历

3143 二叉树的序遍历

 

 时限: 1 s

 空间限制: 3两千KB

 标题品级 : 白金Silver

 

 

主题材料陈述 Description

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

输入描述 Input Description

首先行二个整数n,表示那棵树的节点个数。

接下去n行每行2个整数L和牧马人。第i行的四个整数Li和Ri代表编号为i的节点的左外甥编号和右孙子编号。

输出描述 Output Description

输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔离。

样例输入 Sample Input

5

2 3

4 5

0 0

0 0

0 0

样例输出 萨姆ple Output

1 2 4 5 3

4 2 5 1 3

4 5 2 3 1

数码范围及提醒 Data Size & Hint

n <= 16

代码

#include<iostream>
using namespace std;
int n;
struct node{
    int l,r;
}tree[20];
void dfs(int v)
{
    cout<<v<<' ';
    if(tree[v].l!=0)dfs(tree[v].l);
    if(tree[v].r!=0)dfs(tree[v].r);
}
void afs(int v)
{
    if(tree[v].l!=0)afs(tree[v].l);
    cout<<v<<' ';
    if(tree[v].r!=0)afs(tree[v].r);
}
void cfs(int v)
{
    if(tree[v].l!=0)cfs(tree[v].l);
    if(tree[v].r!=0)cfs(tree[v].r);
    cout<<v<<' ';
}
int main()
{
    cin>>n;
    int x,y;
    for(int i=1;i<=n;i++)
    {
        cin>>x>>y;
        tree[i].l=x;
        tree[i].r=y;
    }
    dfs(1);cout<<endl;
    afs(1);cout<<endl;
    cfs(1);
}

 

 

 

 

 

 

 

 

本文由澳门娱乐6165发布,转载请注明来源

关键词: