zoukankan      html  css  js  c++  java
  • 求先序遍历

    传送门

    (一道dfs的小水题)

    前段时间校内集训的时候

    学长还曾抛出过这个问题

    然而我又咕掉了

    (期中之后准备洗心革面的我决心从dfs开始复(学)

    (卑微

    ----------------------------------------------------------------------------------------

    题目描述

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

    输入输出格式

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

    输出格式:

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

     输入输出样例

    输入样例#1:
    BADC
    BDCA
    
    输出样例#1:
    ABCD
    

    ----------------------------------------------------------------------------------------

    先序遍历

    根-->左子树-->右子树

    中序遍历

    左子树-->根-->右子树

    后序遍历

    左子树-->右子树-->根

    层次遍历

    仅仅需按层次遍历就可以

    前序遍历:1 2 4 5 7 8 3 6

    中序遍历:4 2 7 5 8 1 3 6

    后序遍历:4 7 8 5 2 6 3 1

    层次遍历:1 2 3 4 5 6 7 8

    -----------------------------------------------------------------------------------------------

     由于后序遍历最后遍历到根的特点

    所以后序遍历的最后一个点一定是根节点

    由此在中序遍历的序列中

    找到根节点

    就可以把中序遍历分成两部分:左子树和右子书

    递归下去就可以

    -------------------------------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring> 
    #include<iostream>
    using namespace std;
    char a[10],b[10];
    int len;
    void dfs(int l,int r,int ll,int rr)//后序遍历区间l,r;中序遍历区间ll,rr 
    {
        if(l == r)
        {
            cout<<b[r];
            return;
        } 
        if(l > r)
            return;
        cout<<b[r];
        int cnt = 0,mrk;
        for(int i = ll;i <= rr;i++)
        {
            if(a[i] == b[r])
            {
                mrk = i;
                break;
            }
            else
                cnt++;
        }
        dfs(l,l+cnt-1,ll,mrk - 1);
        dfs(l+cnt,r - 1,mrk+1,rr);
    }
    int main()
    {
        scanf("%s",a);
        scanf("%s",b);
        len = strlen(a);
        dfs(0,len - 1,0,len - 1);
        return 0;
    }
  • 相关阅读:
    WebView断网提示
    Android连续点击多次事件的实现
    Android ADB Server启动失败
    Android Studio撤销与SVN的关联
    SVN拉取后撤销,恢复未拉取之前的状态
    如何通过报表单元格右键控制报表跳转到不同链接地址
    如何提高报表的取数性能
    如何实现参数级联查询
    如何实现参数和报表间的联动效果
    如何实现报表直接打印需求
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10851561.html
Copyright © 2011-2022 走看看