[每日一题] 4月刷爆数据结构第十二天

简介: 大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!

题目要求


农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。


你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。 这是在样例输入和 样例输出中的树的图形表达方式:


         C
         /  \
        /  \
       B    G
      / \  /
       A   D  H
        / \
       E   F

     

树的中序遍历是按照左子树,根,右子树的顺序访问节点。


树的前序遍历是按照根,左子树,右子树的顺序访问节点。


树的后序遍历是按照左子树,右子树,根的顺序访问节点。


输入格式


第一行: 树的中序遍历


第二行: 同样的树的前序遍历


输出格式


单独的一行表示该树的后序遍历。


题目分析


题目难度:⭐️


题目涉及算法:模拟,树形结构,递归。


ps:有能力的小伙伴可以尝试优化自己的代码或者一题多解,这样能综合提升自己的算法能力


题解报告:


1.思路


前序遍历本区间第一个就是该子树的根 然后在中序遍历此区间中找到该节点,节点左边就是左子树,右边就是右子树,这样就可以递归了


2.代码


#include<bits/stdc++.h> 
using namespace std;
string x,y;
void dfs(int a,int b,int c,int d)
{
    if(a>b||c>d)
  {
    return ;
    }
    for(int i=a;i<=b;i++)
    {
      if(x[i]==y[c])
      {
        dfs(a,i-1,c+1,c+i-a);
        dfs(i+1,b,c+i-a+1,d);
        cout<<x[i];
    }
  }
}
int main()
{
    cin>>x>>y;
    int l=x.size();
    dfs(0,l-1,0,l-1);
    return 0;
}


目录
相关文章
|
10月前
|
算法 搜索推荐 C++
【数据结构】手撕排序(二)
【数据结构】手撕排序(二)
|
7月前
|
搜索推荐 算法
【初阶数据结构篇】插入、希尔、选择、堆排序介绍(上篇)
堆排序(Heapsort)是指利⽤堆积树(堆)这种数据结构所设计的⼀种排序算法,它是选择排序的⼀ 种。它是通过堆来进⾏选择数据。需要注意的是排升序要建⼤堆,排降序建⼩堆。
38 0
|
10月前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
67 0
|
10月前
|
存储 C语言
数据结构期末复习(2)链表
数据结构期末复习(2)链表
46 0
|
10月前
|
存储 人工智能 算法
数据结构期末复习(1)数据结构和算法 线性表
数据结构期末复习(1)数据结构和算法 线性表
52 0
|
10月前
|
搜索推荐 算法
【数据结构】手撕排序(一)
【数据结构】手撕排序
|
存储 Java
数据结构之顺序存储结构和链式存储结构分析 , 图文并茂 , 又涨姿势了
单链表/双向链表头插/头删时间复杂度 : O(1) 单链表/双向链表中间插入/删除时间复杂度 : O(N) 循环链表插入/删除时间复杂度 : O(N) 单链表/双向链表/循环链表获取数据时间复杂度 : O(N) 数组头插/头删时间复杂度 : O(N) 数组尾删/尾插时间复杂度 : O(1) 数组中间插入/删除时间复杂度 : O(N) 数组/动态数组根据下标随机访问时间复杂度 : O(1)
1580 0
|
机器学习/深度学习 算法 C++
数据结构刷题:第四天
数据结构刷题:第四天
107 0
数据结构刷题:第四天
|
机器学习/深度学习 算法
数据结构刷题:第十天
时间复杂度:O(n),其中 nn 为二叉搜索树的节点个数。Morris 遍历中每个节点会被访问两次,因此总时间复杂度为 O(2n)=O(n)。
60 0
数据结构刷题:第十天
|
存储 C++
数据结构刷题:第三天
由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。
106 0
数据结构刷题:第三天