zoukankan      html  css  js  c++  java
  • 剑指 Offer 07. 重建二叉树

    **
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
            int len=inorder.size();
            preorder1.assign(preorder.begin(),preorder.end());//拷贝
            for(int i=0;i<len;i++) {
                m.insert(make_pair(inorder[i],i));   //中序遍历数组插入哈希map 查找为o(1)
            }
            return recursion(0,0,len-1);
        }
        TreeNode *recursion(int pre_root,int in_left,int in_right) { //根节点先序下标,左子树中序起始下标,右子树中序结束下标
            if(in_left>in_right) return NULL;
            TreeNode *root=new TreeNode(preorder1[pre_root]);
            int temp=m.find(preorder1[pre_root])->second;  //当前根节点的中序下标
            root->left=recursion(pre_root+1,in_left,temp-1);
            root->right=recursion(temp-in_left+1+pre_root,temp+1,in_right);//右子树根节点的前序下标=左子树节点数+pre_root 左子树节点数=temp-in_left+1
            return root;
        }
    
    private:
        unordered_map<int,int> m;
        vector<int> preorder1;
    };
    诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
  • 相关阅读:
    codevs 2833 奇怪的梦境
    codevs 3058 寻找sb5
    codevs 2989 寻找somebody
    并查集
    排列组合
    序章
    [POJ2625][UVA10288]Coupons
    2017NOIP模拟赛-科普基地
    AIM Tech Round 5 (rated, Div. 1 + Div. 2)
    浙江十套
  • 原文地址:https://www.cnblogs.com/shilipojianshen/p/13586581.html
Copyright © 2011-2022 走看看