当前位置: 首页 > 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.lryc.cn/news/593122.html

    相关文章:

  • 【Python练习】050. 编写一个函数,实现简单的日历功能,显示当前日期和星期
  • Uniapp之键盘弹窗
  • 了解pycharm的基本运用
  • Android无需授权直接访问Android/data目录漏洞
  • 开启你的专属智能时代:枫清科技个人智能体限时体验计划上线!
  • 网络基础DAY13-NAT技术
  • 嵌入式学习-PyTorch(9)-day25
  • Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固
  • Linux:lvs集群技术
  • steam游戏搬砖项目超完整版实操分享
  • 6-大语言模型—预训练:数据处理
  • HOT100——排序篇Leetcode215. 数组中的第K个最大元素
  • LVS工作模式和算法的总结
  • 相角补偿全通滤波器设计:相位均衡(0~350Hz,15°超前)
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 计算机网络——IPv4(25王道最新版)
  • python的第三方库的基本运用
  • RISC采用的3种流水技术的功能和区别分析
  • Xss-labs 1-8以及利用python自动sq8注入
  • 定时器与间歇函数
  • 【C++】入门阶段
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • UniApp 优化实践:使用常量统一管理本地存储 Key,提升可维护性
  • 一站式PDF转Markdown解决方案PDF3MD
  • MyBatis动态SQL实战:告别硬编码,拥抱智能SQL生成
  • 【iOS】编译和链接、动静态库及dyld的简单学习
  • JMeter 元件使用详解
  • k8s快速部署(亲测无坑)
  • Jmeter系列(7)-线程组
  • uniapp相关地图 API调用