当前位置: 首页 > news >正文

leetcode106 从中序与后序遍历序列构造二叉树

中序遍历的根节点左侧是左子树,右侧是右子树,后序遍历的最后一个元素为根节点。

在中序遍历中找到根节点,从而找到左右子树,知道左右子树的范围,从而后序遍历中的左右子树也就确定好了。

然后分别对左右子树用同样的方式递归构造下去。

/**
 * 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:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        unordered_map<int, int> inorder_map;
        for(int i = 0; i < inorder.size(); i++){
            inorder_map[inorder[i]] = i;
        }
        return buildTreeHelper(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1, inorder_map);
    }
private:
    TreeNode* buildTreeHelper(vector<int>& inorder, int in_start, int in_end, 
                            vector<int>& postorder, int post_start, int post_end, 
                            unordered_map<int, int>& inorder_map){
        if(in_start > in_end || post_start > post_end) return nullptr;
        int rootVal = postorder[post_end];
        TreeNode* root = new TreeNode(rootVal);
        int midIndex = inorder_map[rootVal];
        int leftTreeSize = midIndex - in_start;
        root->left = buildTreeHelper(inorder, in_start, midIndex - 1, postorder, post_start, post_start + leftTreeSize - 1, inorder_map);
        root->right = buildTreeHelper(inorder, midIndex + 1, in_end, postorder, post_start + leftTreeSize, post_end - 1, inorder_map);
        return root;
    }
};

http://www.dtcms.com/a/79835.html

相关文章:

  • Java学习笔记-XXH3哈希算法
  • Dify 项目开源大模型应用开发平台
  • deque
  • Linux基础开发工具--gdb的使用
  • 蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形
  • 除自身以外数组的乘积——面试经典150题(力扣)
  • 每天一道算法题-两数相加
  • C++编程语言特性
  • Android Jetpack Compose介绍
  • 238.除自身以外数组的乘积
  • 【sgHelp】自定义组件:网站、平台右下角的帮助助手、指导助理
  • app测试必须进行吗?需要进行哪些测试?
  • 混元视频与万相2.1全面对比分析
  • 嵌入式笔记 | 正点原子STM32F103ZET6 4 | 中断补充
  • 搭建个人博客教程(Hexo)
  • Django+celery+flower
  • 【文件分类助手V1.0b】支持自定义后缀分类整理及目录文档自动生成,方便大家美化管理自己的PC文件库支持Win10/11
  • 【从零开始学习计算机科学与技术】计算机网络(三)数据链路层
  • 蓝桥杯备考---》分类讨论之Fixed Points
  • 在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用
  • Vue3 集成wangEditor 5
  • 鸿蒙开发真机调试:无线调试和USB调试
  • MQ,RabbitMQ,MQ的好处,RabbitMQ的原理和核心组件,工作模式
  • LeetCode 解题思路 22(Hot 100)
  • 9.嗅探与Wireshark进阶分析
  • 使用Python在Word中创建、读取和删除列表 - 详解
  • DeepSeek接入多模态,个人电脑也能飞速生成高清图,确实可以封神了!
  • 目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估):
  • 寄存器(内部访问)
  • WordPress靶场攻略