zoukankan      html  css  js  c++  java
  • 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;
        }
    };

    问题

  • 相关阅读:
    mysql函数取出单个字段重新组成一维数组
    《数字集成电路静态时序分析基础》笔记①
    MexgZABoRn
    备战秋招-手撕代码篇
    芯片岗实习面经(2020暑期实习)
    备战秋招-指导篇
    备战秋招[六]-FIFO深度计算
    将博客搬至CSDN
    备战秋招[五]-异步FIFO
    备战秋招[四]-复位
  • 原文地址:https://www.cnblogs.com/lightmare/p/10463464.html
Copyright © 2011-2022 走看看