侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 106. 从中序与后序遍历序列构造二叉树

Hope
2022-02-22 / 0 评论 / 0 点赞 / 262 阅读 / 923 字
温馨提示:
本文最后更新于 2022-02-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 106. 从中序与后序遍历序列构造二叉树

思路:
与下面这道题一致。
LeetCode 105. 从前序与中序遍历序列构造二叉树
代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    unordered_map<int,int> pos;
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        for(int i=0;i<inorder.size();i++) pos[inorder[i]] = i;
        return build(inorder,postorder,0,inorder.size()-1,0,postorder.size()-1);
    }

    TreeNode* build(vector<int> &inorder,vector<int> &postorder,int il,int ir,int pl,int pr){
        if(pl > pr) return NULL;
        auto root = new TreeNode(postorder[pr]);
        int k=pos[postorder[pr]];
        root->left = build(inorder,postorder , il , k-1 , pl , pl + k - 1 - il);
        root->right = build(inorder,postorder, k+1 , ir , pl + k -1 - il + 1 , pr-1);
        return root;
    }
};
0

评论区