zoukankan      html  css  js  c++  java
  • PAT(Advanced Level)A1138. Postorder Traversal

    题意

    假设二叉树里面的数字都是正数且各不相同,给先序和中序遍历, 要输出后序遍历的第一个元素

    思路

    • 先序和中序遍历序列可以唯一确定一颗二叉树,我们可以建树之后后序遍历就好

    代码

    #include <iostream>
    #include <vector>
    #include <unordered_map>
    #include <algorithm>
    using namespace std;
    struct node {
        int val;
        struct node* left;
        struct node* right;
        node(int x): val(x), left(NULL), right(NULL){}
    };
    unordered_map<int, int> lookup;
    node* build_tree(vector<int>& in_order, int inL, int inR, vector<int>& pre_order, int preL, int preR) {
        if(inL > inR) {
            return NULL;
        }
        node *root = new node(pre_order[preL]);
        int pos = lookup[root->val];
        int num_left = pos - inL;
        root->left = build_tree(in_order, inL, pos - 1, pre_order, preL + 1, preL + num_left);
        root->right = build_tree(in_order, pos + 1, inR, pre_order, preL + num_left + 1, preR);
        return root;
    }
    void post_travel(node* cur, vector<int>& post_order) {
        if(cur) {
            post_travel(cur->left, post_order);
            post_travel(cur->right, post_order);
            post_order.emplace_back(cur->val);
        }
    }
    int main() {
        vector<int> pre_order, in_order;
        int N;
        scanf("%d", &N);
        pre_order.resize(N);
        in_order.resize(N);
        for(int i = 0; i < N; i++)  scanf("%d", &pre_order[i]);
        for(int i = 0; i < N; i++) {
            scanf("%d", &in_order[i]);
            lookup[in_order[i]] = i;
        }
        
        node* root = build_tree(in_order, 0, N - 1, pre_order, 0, N - 1);
        
        vector<int> post_order;
        post_travel(root, post_order);
        cout << post_order.front();
        return 0;
    }
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    线程、协程、Goroutine的区别和联系
    Docker是如何实现跨平台的等问题
    Docker容器与虚拟机有什么区别?
    带www和不带www的域名有什么区别
    netty 入门前阅读
    netty 入门示例
    thingsboard 入门教程
    RSAUtil 工具类
    java zip 打包
    redis 详细讲解
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14517673.html
Copyright © 2011-2022 走看看