• 求先序遍历


    传送门

    (一道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;
    }
  • 相关阅读:
    梦断代码,读书计划
    《梦断代码》读后感1
    四则运算2详细过程
    四则运算2初步构思
    四则运算
    阅读《梦断代码》计划
    四则运算2设计思路
    随机输出30道四则运算题
    软件工程阅读计划
    面试题04
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10851561.html
Copyright © 2020-2023  润新知