• LeetCode106. Construct Binary Tree from Inorder and Postorder Traversal


    题目 

    根据一棵树的中序遍历与后序遍历构造二叉树。

    注意:
    你可以假设树中没有重复的元素。

    例如,给出

    中序遍历 inorder = [9,3,15,20,7]
    后序遍历 postorder = [9,15,7,20,3]

    返回如下的二叉树:

        3
       / 
      9  20
        /  
       15   7

    Tag

    dfs . post+inorder .递归。二分查找


    代码

    还是跟105一样的思路。注意mid此时是post的最后一个。并且递归时,先递归右子树,再递归左子树。因为是后序遍历。

    //recursive .dfs
    class Solution {
    public:
        TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
            int mid= postorder.size()-1 ;//后序遍历。根节点在最后一个。
            return Helper(inorder,postorder,mid,0,postorder.size()-1);
        }
    
        TreeNode* Helper(vector<int>& inorder,vector<int>& postorder,int & mid ,int start ,int end )
        {
            if(start>end||mid<0)
            return nullptr;
    
            TreeNode* root=new TreeNode(postorder[mid]);
            auto pos = distance(inorder.begin(),find(inorder.begin()+start,inorder.begin()+end,postorder[mid]) );
            mid--;//从后面找根节点
    
            //后序是 先递归右子树。再递归左子树
            root->right=Helper(inorder,postorder,mid,pos+1,end);
            root->left=Helper(inorder,postorder,mid,start,pos-1); 
            return root;
        }
    };

    问题

  • 相关阅读:
    阿里云“网红"运维工程师白金:做一个平凡的圆梦人
    3235 战争
    1291 火车线路(区间修改,区间最值)
    P3183 [HAOI2016]食物链
    P1189 SEARCH(逃跑的拉尔夫)
    P1794 装备运输_NOI导刊2010提高(04)
    P2347 砝码称重
    P1332 血色先锋队
    P1772 [ZJOI2006]物流运输
    P1038 神经网络
  • 原文地址:https://www.cnblogs.com/lightmare/p/10463464.html
Copyright © 2020-2023  润新知