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;
      }
    };
  • 相关阅读:
    自考新教材-p173_3(1)
    自考新教材-p148_5(2)
    自考新教材-p148_5(1)
    自考新教材-p148_4
    自考新教材-p147_3
    自考新教材-p146_4(2)
    python 模块 chardet报错解决方法:下载及介绍
    第 52 讲:论一只爬虫的自我修养
    第 51 讲: _name_属性
    Python 培训第一讲
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10191384.html
Copyright © 2011-2022 走看看