已知一棵二叉树的前序和中序遍历金沙js娱乐场官方网站,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历

已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历, 我们都很熟悉二叉树的前序、中序、后序遍历,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历, 我们都很熟悉二叉树的前序、中序、后序遍历,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历, 我们都很熟悉二叉树的前序、中序、后序遍历,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历, 我们都很熟悉二叉树的前序、中序、后序遍历,题目描述 Description,输入描述 Input Description

代码

#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

求后序遍历

1029 遍历问题

 时间限制: 1
s

 空间限制: 128000
KB

 题目等级 : 钻石
Diamond

题目描述 Description

  
 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

 

    所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。

金沙js娱乐场官方网站 1

输入描述 Input Description

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

输出描述 Output Description

    输出文件只包含一个不超过长整型的整数,表示可能的中序遍历序列的总数。

样例输入 Sample Input

abc

cba

样例输出 Sample Output

4

2010 求后序遍历

 

 时间限制: 1
s

 空间限制: 64000
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

二叉树的序遍历

思路

只有一个儿子 的节点 才会在知道 前序后序
的情况下有不同的中序遍历,所以将题目转化成找 只有一个儿子的节点个数。

可以很容易的找出这类节点在前序后序中出现的规律。(前序中出现AB,后序中出现BA,则这个节点只有一个儿子)

每个这类节点有两种中序遍历(及儿子在左,儿子在右)根据乘法原理中序遍历数为
2^节点个数 种

2010 求后序遍历

    时间限制: 1
s    空间限制: 64000
KB    题目等级 : 白银
Silver

 

题目描述 Description

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

abdehicfg

dbheiafcg

样例输出 Sample Output

dhiebfgca

数据范围及提示 Data Size & Hint

输入长度不大于255。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 string n,m;
 6 void postorder(int lp,int rp,int li,int ri)
 7 {
 8     if(lp==rp) { cout<<n[lp];return; }
 9     if(lp>rp||li>ri) return ;
10     int k=m.find(n[lp]);
11     postorder(lp+1,lp+k-li,li,k-1);
12     postorder(lp+k-li+1,rp,k+1,ri);
13     cout<<n[lp];
14 }
15 int main()
16 {
17     cin>>n>>m;
18     int len=n.size();
19     postorder(0,len-1,0,len-1);
20     return 0;
21 }

只需要在前序遍历中找出根节点,在中序遍历中划分开左右子树的列表,然后再继续递归即可~~

1029 遍历问题

 时间限制: 1
s  空间限制: 128000
KB  题目等级 : 钻石
Diamond 题目描述 Description

  
 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

 

    所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。

金沙js娱乐场官方网站 2
输入描述 Input Description

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

输出描述 Output Description

    输出文件只包含一个不超过长整型的整数,表示可能的中序遍历序列的总数。

样例输入 Sample Input

abc

cba

样例输出 Sample Output

4

2010 求后序遍历

 

 时间限制: 1
s

 空间限制: 64000
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

二叉树的序遍历

1029 遍历问题

 时间限制: 1
s

 空间限制: 128000
KB

 题目等级 : 钻石
Diamond

题目描述 Description

  
 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

 

    所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。

金沙js娱乐场官方网站 1

输入描述 Input Description

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

输出描述 Output Description

    输出文件只包含一个不超过长整型的整数,表示可能的中序遍历序列的总数。

样例输入 Sample Input

abc

cba

样例输出 Sample Output

4

2010 求后序遍历

 

 时间限制: 1
s

 空间限制: 64000
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    空间限制: 32000
KB    题目等级 : 白银
Silver

 

题目描述 Description

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

输入描述 Input Description

第一行一个整数n,表示这棵树的节点个数。

接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。

输出描述 Output Description

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

样例输入 Sample Input

5

2 3

4 5

0 0

0 0

0 0

样例输出 Sample Output

1 2 4 5 3

4 2 5 1 3

4 5 2 3 1

数据范围及提示 Data Size & Hint

n <= 16

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 int n,x,y;
 6 struct node{
 7     int left,right;
 8 }tree[256];
 9 void preorder(int k)
10 {
11     cout<<k<<' ';
12     if(tree[k].left!=0)
13       preorder(tree[k].left);
14     if(tree[k].right!=0)
15       preorder(tree[k].right);
16 }
17 void inorder(int k)
18 {
19     if(tree[k].left!=0)
20       inorder(tree[k].left);
21     cout<<k<<' ';
22     if(tree[k].right!=0)
23       inorder(tree[k].right);
24 }
25 void postorder(int k)
26 {
27     if(tree[k].left!=0)
28       postorder(tree[k].left);
29     if(tree[k].right!=0)
30       postorder(tree[k].right);
31     cout<<k<<' ';
32 }
33 int main()
34 {
35     scanf("%d",&n);
36     for(int i=1;i<=n;i++)
37     {
38         scanf("%d%d",&x,&y);
39         tree[i].left=x;tree[i].right=y;
40     }
41     preorder(1);// 前序遍历 
42     cout<<endl;
43     inorder(1);
44     cout<<endl;
45     postorder(1);
46     return 0;
47 }