码迷,mamicode.com
首页 > 其他好文 > 详细

【二叉树】hdu 1710 Binary Tree Traversals

时间:2018-06-13 00:14:27      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:==   none   const   name   中序遍历   opened   get   scan   traversal   

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\n",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\n");
            continue;
        } 
        node *root=dfs(0,n-1,0,mp[pre[0]]);
        postorder(root);
    }
    return 0;
} 
View Code

 

【二叉树】hdu 1710 Binary Tree Traversals

标签:==   none   const   name   中序遍历   opened   get   scan   traversal   

原文地址:https://www.cnblogs.com/itcsl/p/9175547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!