• 【二叉树】hdu 1710 Binary Tree Traversals


    acm.hdu.edu.cn/showproblem.php?pid=1710

    【题意】

    给定一棵二叉树的前序遍历和中序遍历,输出后序遍历

    【思路】

    根据前序遍历和中序遍历递归建树,再后续遍历输出

    malloc申请空间在堆,函数返回,内存不释放,需要free手动释放

    【Accepted】

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    const int maxn=1e3+2;
    int n;
    int pre[maxn],in[maxn],post[maxn];
    int mp[maxn];
    struct node{
        int id;
        node *lef;
        node *rig; 
        node(int i, node *l=NULL, node *r=NULL):id(i),lef(l),rig(r){} 
    };
    node* dfs(int l,int r,int x,int y){
        if(l>r) return NULL;
        node *nd=(node *)malloc(sizeof(node));
        nd->id=in[y];
        nd->lef=dfs(l,y-1,x+1,mp[pre[x+1]]);
        nd->rig=dfs(y+1,r,x+y-l+1,mp[pre[x+y-l+1]]);
        return nd;
    }
    void postorder(node *root){
        if(root==NULL) return;
        postorder(root->lef);
        postorder(root->rig);
        if(root->id==pre[0]){
            printf("%d
    ",root->id);
        }else{
            printf("%d ",root->id);
        }
        free(root);
    }
    int main(){
        while(~scanf("%d",&n)){
            for(int i=0;i<n;i++){
                scanf("%d",&pre[i]);
            }
            for(int i=0;i<n;i++){
                scanf("%d",&in[i]);
                mp[in[i]]=i;
            }
            if(n==1) {
                printf("1
    ");
                continue;
            } 
            node *root=dfs(0,n-1,0,mp[pre[0]]);
            postorder(root);
        }
        return 0;
    } 
    View Code
  • 相关阅读:
    写在“开张”时
    上班真累
    版本控制
    电脑主板报警声音的故障现象对照表
    js页面打开倒计时
    js中的词法分析
    修改mysql数据库密码
    上班的感受
    能力是被逼出来的!!有压力才有动力
    js中绑定事件的三种方式
  • 原文地址:https://www.cnblogs.com/itcsl/p/9175547.html
Copyright © 2020-2023  润新知