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

力扣 hot100 Day49

105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

//抄的
class Solution {
private:unordered_map<int, int> index;TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>& inorder, int pre_left, int pre_right, int in_left, int in_right) {if (pre_left > pre_right) return nullptr;int root_val = preorder[pre_left];TreeNode* root = new TreeNode(root_val);int in_root = index[root_val];int left_size = in_root - in_left;root->left = myBuildTree(preorder, inorder, pre_left + 1, pre_left + left_size, in_left, in_root - 1);root->right = myBuildTree(preorder, inorder, pre_left + left_size + 1, pre_right, in_root + 1, in_right);return root;}public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if (preorder.size() != inorder.size() || preorder.empty()) return nullptr;for (int i = 0; i < inorder.size(); ++i) {index[inorder[i]] = i;}return myBuildTree(preorder, inorder, 0, preorder.size() - 1, 0, inorder.size() - 1);}
};

基本逻辑如下

  1. ​​从 preorder 获取当前根节点​​(即 preorder[0])。
  2. ​​在 inorder 中找到根节点的位置 root_idx​​:
    • inorder[root_idx] 是根节点。
    • inorder[0 ... root_idx-1] 是左子树的中序遍历。
    • inorder[root_idx+1 ... end] 是右子树的中序遍历。
  3. ​​递归构建左子树和右子树​​:
    • ​​左子树的 preorder​​:preorder[1 ... left_size]left_size 是左子树的节点数)。
    • ​​右子树的 preorder​​:preorder[left_size+1 ... end]
  4. ​​终止条件​​:如果 preorder 或 inorder 为空,返回 nullptr

总体是分治思想,一步步构建二叉树,引入哈希表用于快速查找根节点位置

感觉很复杂,得多做几遍

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

    相关文章:

  • day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II
  • 二、环境搭建之CentOS安装Docker
  • GitHub:只支持 Git 作为唯一的版本库格式进行托管
  • 二分查找-69.x的平方根-力扣(LeetCode)
  • 安装单机版本Redis
  • 电商商品综合排序:从需求分析到实时计算的全方位指南
  • 初识Redis---Redis的特性介绍
  • GM-3568JHF vs 普通 RK3568 开发板 — 工业应用对比文案
  • 学习 Python 爬虫需要哪些基础知识?
  • 3516cv610 npu 开发典型功能点的介绍
  • Azure Bicep 是什么?
  • leetcode_121 买卖股票的最佳时期
  • AWS Partner: Accreditation (Technical)
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 57(题目+回答)
  • QT动态加载动态库 QLibrary
  • 从车险理赔到快递签收:打通区块链与现实世界的“最后一公里”——解密预言机(Oracle)
  • aws(学习笔记第四十九课) ECS集中练习(1)
  • 基于深度学习的推荐系统:从协同过滤到神经网络
  • Java机考题:815. 公交路线 图论BFS
  • OpenCV 官翻7 - 对象检测
  • 用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 02
  • Vue 3 中导出 Excel 文件
  • github上传代码
  • window、DOM、document、html 他们之间的关系是什么?
  • springboot基础-demo
  • Java中缓存的使用浅讲
  • Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)
  • 深入理解设计模式:策略模式的艺术与实践
  • 云端成本治理利器:亚马逊云科技智能仪表盘(AWS Cost Intelligence Dashboard)深度解析
  • Android14 SystemUI 启动流程(2)