二叉树hdu 1710 Binary Tree Traversals

Posted itcsl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树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

 

以上是关于二叉树hdu 1710 Binary Tree Traversals的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1710 Binary Tree Traversals(二叉树)

HDU 1710Binary Tree Traversals(已知前序中序,求后序的二叉树遍历)

binary tree+tree order

HDU 6161.Big binary tree 二叉树

Leetcode-965 Univalued Binary Tree(单值二叉树)

Binary Tree Traversals HDU - 1710 ?