zoukankan      html  css  js  c++  java
  • 重建二叉树

    给定一棵二叉树的前序遍历和中序遍历的结果,求其后序遍历。

    输入

    输入可能有多组,以EOF结束。
    每组输入包含两个字符串,分别为树的前序遍历和中序遍历。每个字符串中只包含大写字母且互不重复。

    输出

    对于每组输入,用一行来输出它后序遍历结果。

    理论知识可以参考这个大佬的博客:

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73260878e482a958448e435061e5a38b8fc7f794c5189822f3b1ced545be0f636743d0637b7ec92ce1583afd7756fde28230016913518c469abdc352fd621e04d9faf0e97cae733e3b9a2a7c82552dd52756df0f49c2e7703ba6fe76335f4a7e95f642c07cee827648f4e072e885246a14689f7436b10f1f4ca5d3cd45cd2766597b834c02962b604d3140c5546b738c21f505627903c308e322a05e2fc2be33d0f4234b738a4cfc3a19f489bdd9a26e8f9dcd8248211e4d29e8a664300458a22a9dabba53c145272afdda915d342b7ed98ca5be965c06159ad2977386abe7ce5869820f4755b84f0188d3e56273f0bafa402fd62046f26a94e0fc11cd702ba990749cb9eee9f9e6552afee&p=c23bd50286cc41af58ba8c2d0214bb&newp=997ec54ad6c341fe0be296344d5dcf231610db2151d7d41e6b82c825d7331b001c3bbfb423241602d8c7776d04aa495ee1fa317835052ba3dda5c91d9fb4c57479d9&user=baidu&fm=sc&query=%B8%F8%B6%A8%D2%BB%BF%C3%B6%FE%B2%E6%CA%F7%B5%C4%C7%B0%D0%F2%B1%E9%C0%FA%BA%CD%D6%D0%D0%F2%B1%E9%C0%FA%B5%C4%BD%E1%B9%FB%2C%C7%F3%C6%E4%BA%F3%D0%F2%B1%E9%C0%FA%A1%A3&qid=d70328c800038146&p1=3

    每次从先序遍历中找到根结点,然后在中序中确定左右子树,可以保证输出是后序输出;

    代码如下

    #include <stdio.h>
    #include <cstring>
    #include <iostream>
    using namespace std;
    int aCnt,len;
    char pre[1001],mid[1001],ans[1001]; 
    //pStart:前序序列的开始位置; pEnd 前序结束位置; mStart: 中序开始位置,mEnd:中序结束的位置 
    void back(int pStart,int pEnd, int mStart, int mEnd)
    {
    int k;
    if(pStart>pEnd||mStart>mEnd)return;
    //mid[k] 当前遍历树的 根节点
    for(k=mStart;k<=mEnd;k++)
    if(pre[pStart]==mid[k])break;
    back(pStart+1,pStart+k-mStart,mStart,k-1); //后续遍历 左子树
    back(pStart+k-mStart+1,pEnd,k+1,mEnd); //后续遍历 右子树
    ans[aCnt++]=mid[k]; //存储根节点
    }
    
    int main()
    {
    int n;
    while(~scanf("%s%s",pre,mid))
    {
    len=strlen(pre);
    aCnt=0;
    back(0,len-1,0,len-1);
    for(int i=0;i<aCnt;i++)printf("%c",ans[i]);
    printf("
    ");
    }
    return 0;
    }
    View Code
  • 相关阅读:
    一点点深夜感慨(还有居家学习日常)
    区间dp 矩阵连乘
    logstash grok match 对等于号,和中括号做筛选
    grok内置的默认类型有很多种,查看所有默认类型
    python开发技术要求
    django--models操作--备注
    django程序--settings.py文件备注
    django-admin 命令备注
    官网提供jumpserver安装文档--复盘 CentOS 7 安装文档
    安装jumpserver,提示错误
  • 原文地址:https://www.cnblogs.com/new-hand/p/7241775.html
Copyright © 2011-2022 走看看