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

LeetCode:47.从前序和中序遍历序列构造二叉树

目录

1.从前序和中序遍历序列构造二叉树


1.从前序和中序遍历序列构造二叉树

当给定了一个前序遍历和中序遍历后我们能够得到那些信息?

        首先前序遍历的第一个节点是根节点,当得知根节点后,可以将中序遍历分为两部分,左边的就是左子树的元素,右边的就是右子树的元素,而对于两颗子树来说也可以通过这种方式来不断进行分割子树

        所以这道题就可以通过递归的方式来解决,我们通过函数传入前序遍历以及左右边界,中序遍历以及左右边界,我们可以先通过哈希表来建设值和下标的映射关系,因为前序第一个元素就是根节点,很好确定,但是中序就只能通过值的映射来确定,当我们得知前序根的下标pre_root和中序的in_root,就可以用in_root - in_left来确定左子树的值了

        对于左子树来说,在前序遍历中的范围为【pre_left + 1, pre_left + left_size】,pre_left + 1表示跳过第一个根节点,pre_left + left_size表示左子树的节点数,而在中序遍历中范围为【in_left,in_root - 1】,起点很好理解,in_root就是根节点的下标 ,减一就表示左边的部分

        对于右子树来说,前序中【pre_left + left_size + 1, pre_right】,中序【in_root + 1, in_right】

class Solution {unordered_map<int, int> hash;
public:TreeNode* createTree(vector<int>& preorder, vector<int>& inorder, int pre_left, int pre_right, int in_left, int in_right){if(pre_left > pre_right || in_left > in_right) return nullptr;int pre_root = pre_left;int in_root = hash[preorder[pre_root]];int left_size = in_root - in_left;TreeNode* root = new TreeNode(preorder[pre_root]);root->left = createTree(preorder, inorder, pre_left + 1, pre_left + left_size, in_left, in_root - 1);root->right = createTree(preorder, inorder, pre_left + left_size + 1, pre_right, in_root + 1, in_right);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = inorder.size();for(int i = 0; i < n; i++)hash[inorder[i]] = i;return createTree(preorder, inorder, 0, n - 1, 0, n - 1);}
};

        

        

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

相关文章:

  • MySQL安装避坑指南:从环境适配到故障修复的全场景实战手册
  • React教程(React入门教程)(React组件、JSX、React Props、React State、React事件处理、Hooks、高阶组件HOC)
  • 2025年CSP-S初赛真题及答案解析(完善程序第1题)
  • 六、页面优化
  • CVAT部署到虚拟机小记
  • scss基础学习
  • 基于衍射神经网络的光学高速粒子分类系统A1(未做完)
  • ffprobe安装与简单使用
  • close函数就像“关门“操作,用于关闭文件描述符释放系统资源
  • PyTorch 神经网络工具箱学习笔记
  • Qt常用控件之QWidget(三)
  • apache poi excel 单元格换行
  • 全能视频下载器-下载自媒体平台视频 v1.5.5 专业版
  • 状态模式指南:对象状态变化的优雅管理
  • 自动化多段视频删除:FFmpeg.AutoGen 与 C# 的完整实现​
  • C、C++、Java 和 Python:四大编程语言的对比分析
  • ESP iic驱动
  • Ai-Agent学习历程——大模型的概念
  • 5G NR-NTN协议学习系列:NR-NTN介绍(3)
  • 一场 MCP 生态的变革——详解 OpenTiny NEXT 逆向思维的技术创新
  • 【案例教程】从CNN到 Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
  • 私有证书不被edge浏览器认可的问题的解决-Debian13环境下
  • 团体程序设计天梯赛 L2-052 吉利矩阵 (DFS+剪枝)(Java实现)
  • 【LeetCode 每日一题】966. 元音拼写检查器
  • windows 服务器如何开启系统自带的ftp服务
  • 2025年面试经历
  • Linux 基础:目录结构
  • OpenLayers地图交互 -- 章节七:指针交互详解
  • Kafka实战案例一:阿里云Kafka智能设备数据实时处理系统
  • 回调函数与错误处理