• 洛谷 p1030 树的遍历


     

    简单dfs

    题目描述

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 88)。

    输入:

    2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

    输出:

    1行,表示一棵二叉树的先序。

    输入输出样例

    输入 #1
    BADC
    BDCA
    输出 #1
    ABCD
    从后序里找树的根节点(最后一个),前序中根据根节点把树分成左子树和右子树之后重复操作此过程
    注意dfs的出口。
    代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s1,s2;
     4 int len;
     5 void dfs(int l1,int r1,int l2,int r2){
     6     //printf("%d %d %d %d\n",l1,r1,l2,r2);
     7     if(l1>r1)
     8     return ;
     9     else
    10     cout<<s2[r2];
    11     for(int i=l1;i<=r1;i++){
    12         if(s1[i]==s2[r2]){
    13             dfs(l1, i-1, l2, l2+i-l1-1);
    14             dfs(i+1, r1, i+l2-l1, r2-1);
    15         }
    16     }
    17 }
    18 int main(){
    19     cin>>s1>>s2;
    20     len=s1.size();
    21     dfs(0,len-1,0,len-1);
    22     return 0;
    23 }

     

    #include<bits/stdc++.h>
    using namespace std;
    string s1,s2;
    int len;
    void dfs(int l1,int r1,int l2,int r2)
    { //printf("%d %d %d %d\n",l1,r1,l2,r2); if(l1>r1) return ; else cout<<s2[r2]; for(int i=l1;i<=r1;i++)
    { if(s1[i]==s2[r2])
    { dfs(l1, i-1, l2, l2+i-l1-1); dfs(i+1, r1, i+l2-l1, r2-1); } } } int main(){ cin>>s1>>s2; len=s1.size(); dfs(0,len-1,0,len-1); return 0; }
  • 相关阅读:
    TyporaRecord
    c# 串口 应答式顺序下发命令 循环 间隔发送指令
    WPF 如何在单独的配置文件中使用Log4net
    UWP VisualStateManager
    USB通信
    UWP RelativePanel
    JSON 序列化与反序列化
    Unity 依赖注入的三种常用模板
    IOC Unity容器的基本使用
    使用EF完成基于SQLite的CodeFirst
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12489476.html
Copyright © 2020-2023  润新知