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

二叉树构建(从3种遍历中构建)python刷题记录

R3-树与二叉树篇.

目录

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

算法思路:

灵神套路 

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

算法思路: 

灵神套路 

从前序和后序遍历序列构造二叉树

算法思路:  

灵神套路 

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

算法思路:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:#仅限于无结点重复的序列def recur(root,left,right):#递归终止条件(遍历一遍中序遍历完成)if left>right:return#建立根节点的子树node=TreeNode(preorder[root])i=dict[preorder[root]]#左子树递归node.left=recur(root+1,left,i-1)#右子树递归node.right=recur(i-left+root+1,i+1,right)return node#存储中序遍历的值与索引的映射dict={key:index for index,key in enumerate(inorder)}return recur(0,0,len(inorder)-1)

灵神套路 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:def dfs(pre_l,pre_r,in_l,in_r):if pre_l==pre_r:return None#左子树大小left_size=dict[preorder[pre_l]]-in_lleft=dfs(pre_l+1,pre_l+1+left_size,in_l,in_l+left_size)right=dfs(pre_l+1+left_size,pre_r,in_l+1+left_size,in_r)return TreeNode(preorder[pre_l],left,right)#存储中序遍历的值与索引的映射dict={key:index for index,key in enumerate(inorder)}#左闭右开区间return dfs(0,len(preorder),0,len(inorder))

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

算法思路: 

灵神套路 
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:def dfs(in_l,in_r,post_l,post_r):if post_l==post_r:return None#左子树大小left_size=dict[postorder[post_r-1]]-in_lleft=dfs(in_l,in_l+left_size,post_l,post_l+left_size)right=dfs(in_l+left_size+1,in_r,post_l+left_size,post_r-1)return TreeNode(postorder[post_r-1],left,right)#存储中序遍历的值与索引的映射dict={key:index for index,key in enumerate(inorder)}#左闭右开区间return dfs(0,len(inorder),0,len(postorder))

从前序和后序遍历序列构造二叉树

算法思路:  

灵神套路 
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def constructFromPrePost(self, preorder: List[int], postorder: List[int]) -> Optional[TreeNode]:def dfs(pre_l,pre_r,post_l):if pre_l==pre_r:return None#叶子结点if pre_l+1==pre_r:return TreeNode(preorder[pre_l])#左子树大小left_size=dict[preorder[pre_l+1]]-post_l+1left=dfs(pre_l+1,pre_l+1+left_size,post_l)right=dfs(pre_l+1+left_size,pre_r,post_l+left_size)return TreeNode(preorder[pre_l],left,right)#存储前序遍历的值与索引的映射dict={key:index for index,key in enumerate(postorder)}#左闭右开区间return dfs(0,len(preorder),0)

http://www.lryc.cn/news/412832.html

相关文章:

  • 计算机网络中协议与报文的关系
  • 机器学习 第8章-集成学习
  • Docker 安装 GitLab教程
  • 如何在生产环境中千万表添加索引并保证数据一致性
  • Uni-APP页面跳转问题(十六)
  • Java新特性(二) Stream与Optional详解
  • springboot系列教程(三十一):springboot整合Nacos组件,环境搭建和入门案例详解
  • Traefik系列
  • 【力扣】3128. 直角三角形 JAVA
  • 如何全面提升企业安全意识
  • 全球支持与无界服务:跨越地域的数据采集与分析
  • Java面试八股之简述spring boot的目录结构
  • python == 与 is区别
  • STM32学习笔记1---LED,蜂鸣器
  • 动手学强化学习 第 15 章 模仿学习 训练代码
  • 第一阶段面试问题(前半部分)
  • 《数学教学通讯》是一本怎样的刊物?投稿难吗?
  • <机器学习> K-means
  • 我们如何优化 Elasticsearch Serverless 中的刷新成本
  • MySQL半同步复制
  • [一本通提高数位动态规划]数字游戏:取模数题解
  • [Day 39] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • OpenStack入门体验
  • 预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据
  • iOS 系统提供的媒体资源选择器(UIImagePickerController)
  • 电脑如何扩展硬盘分区?告别空间不足困扰
  • 论文阅读:Mammoth: Building math generalist models through hybrid instruction tuning
  • 什么样的双筒式防爆器把煤矿吸引?
  • 如何保证冰河AL0 400G 100W 的稳定运行?
  • 剪画小程序:巴黎奥运会,从画面到声音!