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;
      }
    };
  • 相关阅读:
    java学习(4):第一个Java程序(Hello world)
    java学习(3):字符集和字符编码的区别
    java学习(2):二进制、十进制、原码、反码、补码
    Java学习(1):JRE和JDK
    缓存
    关联表查询
    男0女1
    嵌套查询
    定义别名
    增删改查
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10191384.html
Copyright © 2011-2022 走看看