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

每日一题——重建二叉树

重建二叉树

题目描述
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。
tupian1
提示:
1.vin.length == pre.length
2.pre 和 vin 均无重复元素
3.vin出现的元素均出现在 pre里
4.只需要返回根结点,系统会自动输出整颗树做答案对比
数据范围:n≤2000,节点的值:−10000≤val≤10000
要求:空间复杂度 O(n),时间复杂度 O(n)

思考了好几天没有想到解题方法,以下方案参考了大家的解题思路:

采用的方法:递归
递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。

思路:二叉树的前序遍历,我们可以直到第一个元素是根节点,因为序列没有重复的元素,我们可以从中序遍历中找到根节点,将一个树分为左子树和右子树两个部分。
具体做法:

  1. 先根据前序遍历第一个点构建根节点;
  2. 然后根据中序遍历找到根节点在数组中的位置;
  3. 再按照字数的节点数将两个遍历的序列分割成子数组,将子数组送入函数构建子树;
  4. 直到子树的序列长度为0,结束递归。
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param preOrder int整型一维数组 
# @param vinOrder int整型一维数组 
# @return TreeNode类
#
class Solution:def reConstructBinaryTree(self , preOrder: List[int], vinOrder: List[int]) -> TreeNode:# write code here# 分别获取中序遍历和前序遍历的长度len_pre = len(preOrder)len_vin = len(vinOrder)# 判断这两个长度都不为0if len_pre == 0 or len_vin == 0:return None# 构建根节点root = TreeNode(preOrder[0])# 从中序遍历中找到根节点所在的位置for i in range(len_vin):if preOrder[0] == vinOrder[i]:# 获取左子树的前序遍历left_pre = preOrder[:i]# 获取左子树的中序遍历left_vin = vinOrder[1:i+1]# 构建左子树root.left = reConstructBinaryTree(left_pre, left_vin)# 获取右子树的前序遍历right_pre = preOrder[i+1:]# 获取右子树的中序遍历right_vin = vinOrder[i+1:]# 构建右子树root.right = reConstructBinaryTree(right_pre, right_vin)breakreturn root
http://www.lryc.cn/news/103031.html

相关文章:

  • Python - json与字典dict
  • 性能测试必备监控技能linux篇
  • 【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)
  • C++ 面向对象三大特征
  • 【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin
  • Echarts常见图表展示
  • PySpark机器学习实战案例
  • 微软操作系统中,windows server 系列和windows 的区别
  • 本地部署 Stable Diffusion XL 1.0 Gradio Demo WebUI
  • 模型法在初中物理中的实例与应用
  • el-table 设置行背景颜色 鼠标移入高亮问题处理
  • 嵌入式面试常见题目收藏(超总结)
  • error in file(out, “wt“): cannot open the connection
  • Redis (一)消息订阅和发送测试
  • 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测
  • Debian 12.1 “书虫 “发布,包含 89 个错误修复和 26 个安全更新
  • hadoop部署配置
  • 文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题
  • uniapp:手写签名,多张图合成一张图
  • DevExpress WPF Tree List组件,让数据可视化程度更高!(一)
  • Linux操作系统下安装python环境
  • JavaScript的宏任务和微任务
  • java的空引用null和空字符串““
  • Python+OpenCV实现自动扫雷,挑战扫雷世界记录!
  • XtarBackup 8.0.33-28 prepare 速度提升 20 倍!
  • Blazor前后端框架Known-V1.2.8
  • python模拟加密爬取诸葛
  • 安全学习DAY13_WEB应用源码获取
  • Selenium+Java环境搭建(测试系列6)
  • Shell编程学习-If条件语句