• 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;
        }
    };

    问题

  • 相关阅读:
    Vue2.5
    Vue --- :is
    Vue面试中经常会被问到的面试题
    100道JS构造函数面试题
    100道前端面试题
    占位
    06-验证码-基本功能实现
    由ES规范学JavaScript(二):深入理解“连等赋值”问题
    JS中keyup, keypress, keydown以及oninput四个事件的区别
    Java中class的声明
  • 原文地址:https://www.cnblogs.com/lightmare/p/10463464.html
Copyright © 2020-2023  润新知