• 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;
      }
    };
  • 相关阅读:
    Java SE(2)
    Java SE(1)
    第二次作业
    Markdown 进阶
    关于主题
    Markdown入门指南
    网络游戏架构与微服务架构简单对比
    微服务框架的存储架构
    轻量级微服务框架的通信架构
    页面静态化
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10191384.html
Copyright © 2020-2023  润新知