zoukankan      html  css  js  c++  java
  • LC 889. Construct Binary Tree from Preorder and Postorder Traversal

    Return any binary tree that matches the given preorder and postorder traversals.

    Values in the traversals pre and post are distinct positive integers.

     

    Example 1:

    Input: pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
    Output: [1,2,3,4,5,6,7]
    

     

    Note:

    • 1 <= pre.length == post.length <= 30
    • pre[] and post[] are both permutations of 1, 2, ..., pre.length.
    • It is guaranteed an answer exists. If there exists multiple answers, you can return any of them.

    Runtime: 20 ms, faster than 10.38% of C++ online submissions for Construct Binary Tree from Preorder and Postorder Traversal.

    想用map优化查找left root的速度,结果更慢了....

    #include <assert.h>
    class Solution {
    private:
      unordered_map<int,int>mp;
    public:
      TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& post) {
        for(int i=0; i<post.size(); i++) mp[post[i]] = i;
        return helper(pre, post, 0, pre.size()-1, 0, post.size()-1);
      }
      TreeNode* helper(vector<int>& pre, vector<int>& post, int pres, int pree, int poss, int pose){
        if(pres > pree || poss > pose) return nullptr;
        assert(pre[pres] == post[pose]);
        int rootval = pre[pres];
        TreeNode* root = new TreeNode(rootval);
        if(pres == pree && poss == pose) return root;
        int leftidx = mp[pre[pres+1]];
        int leftlength = leftidx - poss + 1;
        int leftpose = pres + leftlength;
        root->left = helper(pre, post, pres+1, leftpose, poss, leftidx);
        root->right = helper(pre, post, leftpose+1, pree, leftidx+1, pose-1);
        return root;
      }
    };
  • 相关阅读:
    算法:基于分布的排序算法
    剑指offer:镜像二叉树
    算法:基于比较的排序算法
    LeetCode做题笔记-135
    初识YOLO
    PHP课设图览
    浅谈C语言整型与浮点型转换
    SQL Server EXPRESS 安装
    2020CCPC 东北四省(区域)赛题目一览
    2020CCPC 黑龙江省赛题目一览
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10191384.html
Copyright © 2011-2022 走看看