zoukankan      html  css  js  c++  java
  • leetcode

    • 前序+中序

      //除了叶子节点,其他所有的节点都有左右孩子的二叉树才能被先序和后序数组重构出来
      class Solution {
      public:
          unordered_map<int, int> pos;
          TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& in) {
              if(pre.empty() or in.empty()) return nullptr;
              int n = pre.size();
              for(int i = 0; i < n; ++ i) pos[in[i]] = i;
              return buildSubtree(pre, 0, n - 1, in, 0, n - 1);
          }
      
          TreeNode* buildSubtree(vector<int>& pre, int l, int r, vector<int>& in, int i, int j)
          {
              if(l > r) return nullptr;
              TreeNode* root = new TreeNode(pre[l]);
              int mid = pos[pre[l]];
              int k = mid - i; //左子树长度
              root -> left = buildSubtree(pre, l + 1, l + 1 + k, in, i, mid);
              root -> right = buildSubtree(pre, l + k + 2, r, in, mid + 1, j);
              return root;
          }
      };
      
    - 后序+中序
    
        ```
        //除了叶子节点,其他所有的节点都有左右孩子的二叉树才能被先序和后序数组重构出来
        class Solution {
        public:
            unordered_map<int, int> pos;
            TreeNode* constructFromPrePost(vector<int>& in, vector<int>& post) {
                if(in.empty() or post.empty()) return nullptr;
                int n = in.size();
                for(int i = 0; i < n; ++ i) pos[in[i]] = i;
                return buildSubtree(in, 0, n - 1, post, 0, n - 1);
            }
        
            TreeNode* buildSubtree(vector<int>& in, int i, int j, vector<int>& post, int l, int r)
            {
                if(l > r) return nullptr;
                TreeNode* root = new TreeNode(pre[r]);
                int mid = pos[in[r]];
                int k = mid - i;
                root -> left = buildSubtree(in, i, mid, post, l, l + k);
                root -> right = buildSubtree(in, mid + 1, j, post, l + k + 1, r - 1);
                return root;
            }
        };
    
    • 前序+后序

      //除了叶子节点,其他所有的节点都有左右孩子的二叉树才能被先序和后序数组重构出来
      class Solution {
      public:
          unordered_map<int, int> pos;
          TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& post) {
              if(pre.empty() or post.empty()) return nullptr;
              int n = pre.size();
              for(int i = 0; i < n; ++ i) pos[post[i]] = i;
              return buildSubtree(pre, 0, n - 1, post, 0, n - 1);
          }
      
          TreeNode* buildSubtree(vector<int>& pre, int l, int r, vector<int>& post, int i, int j)
          {
              if(l > r) return nullptr;
              TreeNode* root = new TreeNode(pre[l]);
              if(l == r) return root;
              int mid = pos[pre[l + 1]];
              root -> left = buildSubtree(pre, l + 1, l + 1 + mid - i, post, i, mid);
              root -> right = buildSubtree(pre, l + mid - i + 2, r, post, mid + 1, j - 1);
              return root;
          }
      };
      
  • 相关阅读:
    点击事件
    php if语句判定my查询是否为空
    php if语句判定ms查询是否为空
    thinkphp 原生sql使用分页类
    从JAVA客户端访问Redis示例(入门)
    Log4j日志级别
    网页正文抽取(包含提取图片)
    网络爬虫基本原理
    Java中替换HTML标签的方法代码
    Java/Js下使用正则表达式匹配嵌套Html标签
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12333357.html
Copyright © 2011-2022 走看看