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

二叉树遍历 A1086.Tree Traversals Again(25) (转化为给定前序和中序列,求后序)

时间:2020-01-24 00:07:11      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:mic   code   use   ret   二叉树   rcm   ace   class   http   

#include <bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>
#include <queue>
using namespace std;
const int maxn = 50;
struct node{
    int data;
    node* lchild;
    node* rchild;
};
int pre[maxn],in[maxn],post[maxn];
int n;
node* create(int preL,int preR,int inL,int inR){
    if(preL > preR){
        return NULL;
    }
    node* root = new node;
    int temp = pre[preL];
    root->data = temp;
    int k;
    for(int i = inL;i<=inR;++i){
        if(in[i] == temp){
            k = i;
        }
    }
    int numLeft = k - inL;
    root->lchild = create(preL+1,preL + numLeft,inL,k - 1);
    root->rchild = create(preL + numLeft + 1,preR,k+1,inR);
    return root;
}
int num = 0;
void postOrder(node *root){
    if(root == NULL){
        return;
    }
    postOrder(root->lchild);
    postOrder(root->rchild);
    printf("%d",root->data);
    num++;
    if(num < n){
        printf(" ");
    }
}

int main(){
    scanf("%d",&n);
    char str[5];
    stack<int> st;
    int x,preList,inList;
    preList = 0;
    inList = 0;
    for(int i=0;i< 2*n;++i){
        scanf("%s",str);
        if(strcmp(str,"Push")==0){
            scanf("%d",&x);
            st.push(x);
            pre[preList] = x;
            preList++;
        }else{
            x = st.top();
            st.pop();
            in[inList] = x;
            inList++;
        }
    }
    node* root = create(0,n-1,0,n-1);
    postOrder(root);
    system("pause");
    return 0;
}

 技术图片

 

二叉树遍历 A1086.Tree Traversals Again(25) (转化为给定前序和中序列,求后序)

标签:mic   code   use   ret   二叉树   rcm   ace   class   http   

原文地址:https://www.cnblogs.com/JasonPeng1/p/12231656.html

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