zoukankan      html  css  js  c++  java
  • 洛谷 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; }
  • 相关阅读:
    百度地图Api 根据两个坐标点计算距离
    Android 6.0 Permission权限与安全机制
    CentOS安装nginx
    CentOS安装mysq
    CentOS安装JDK
    -bash: /root/java/jdk/bin/java: cannot execute binary file
    数据库连接池之_DButils
    数据库连接池之_c3p0
    数据库连接池之_Druid简单使用
    后台管理平台编辑表格
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12489476.html
Copyright © 2011-2022 走看看