zoukankan      html  css  js  c++  java
  • 洛谷 P1030 求先序排列

    这道题中,有几个可以确定的信息

    1.后序排列的最后一个元素必然是这个树的主根节点

    2.我们在输出的时候,可以只需要输出访问的父节点即可,那么就只需要把一个树不断地分为两个子树,然后找到他们的父节点,不断地递归输出

    那么,我们可以在中序遍历找到父节点之后,计算出他的左子树和右子树的节点数量。

    然后,由于我们对结点的访问一定是先访问一颗子树,在访问另一颗,所以在我们的原后序遍历串右边界中减掉右子树节点个数再减一即为新的左子树右边界,在原后序遍

    历串左边界加上左子树节点个数即为新的右子树左边界;

    代码

    #include<iostream>

    #include<cstdio>

    #include<algorithm>
    #include<cstring>
    #include<math.h>
    using namespace std;
    
    char s1[1000];
    char s2[1000];
    int len;
    
    int find(char ch)
    {
        for(int i=0;i<len;i++)
        {
            if(s1[i]==ch)
            {
                return i;
            }
        }
    }
    
    void dfs(int l1,int r1,int l2,int r2)//l1为左子树起点,r1为右子树起点,l2为左子树边界,r2为右子树边界
    {
    int m=find(s2[r2]); cout<<s2[r2]; if(m>l1)//有左子树 dfs(l1,m-1,l2,r2-r1+m-1);//r1-m为右子树节点数 if(m<r1)//有右子树 dfs(m+1,r1,l2+m-l1,r2-1);//m-l1为左子树节点数 } int main(void) { cin>>s1; cin>>s2; len=strlen(s1); dfs(0,len-1,0,len-1); return 0; }
  • 相关阅读:
    JVM——类加载
    Java IO输入输出
    核心标签库和el
    request对象
    安装tomcat
    安装mongodb
    MySQL在简单命令行操作
    安装MySQL
    Java几种常见的异常类型
    Java简单正则表达式写爬虫
  • 原文地址:https://www.cnblogs.com/jd1412/p/12767751.html
Copyright © 2011-2022 走看看