zoukankan      html  css  js  c++  java
  • 【HDU1710】树的遍历

    题目大意:给定一棵 N 个节点的二叉树的前序遍历和中序遍历,求其后序遍历。

    题解:递归操作,每次只需知道先序遍历和中序遍历的开始点,左子树大小即可,根据前序遍历的开始位置可知子树根节点的坐标,再在中序遍历中找到对应的左子树大小,递归操作下去,一棵二叉树就被完全地确定下来了。

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    
    int n,pre[maxn],mid[maxn];
    
    void read_and_parse(){
        for(int i=1;i<=n;i++)scanf("%d",&pre[i]);
        for(int i=1;i<=n;i++)scanf("%d",&mid[i]);
    }
    
    void dfs(int a,int b,int n,int tag){
        int i;
        if(n<=0)return;
        for(i=0;pre[a]!=mid[b+i];i++);
        dfs(a+1,b,i,0);
        dfs(a+i+1,b+i+1,n-i-1,0);
        printf("%d",pre[a]);
        if(!tag)printf(" ");
        else puts("");
    }
    
    void solve(){
        dfs(1,1,n,1);
    }
    
    int main(){
        while(scanf("%d",&n)!=EOF){
            read_and_parse();
            solve();
        }
        return 0;
    }
    
  • 相关阅读:
    2017NOIP游记 (格式有点炸)
    Qtree3
    [P2769] 猴子上树
    [Usaco2005 Dec]Cleaning Shifts 清理牛棚
    [NOIP2014] 解方程
    [ZJOI2012] 灾难
    [洛谷P3941] 入阵曲
    [SCOI2009] 最长距离
    [JLOI2011] 飞行路线
    虚拟化数电底层
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/10244689.html
Copyright © 2011-2022 走看看