记录一下最近遇到的几个二叉树的题型(附好用的遍历模板)

本文主要是介绍记录一下最近遇到的几个二叉树的题型(附好用的遍历模板),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

107. 二叉树的层序遍历 II

102. 二叉树的层序遍历

987. 二叉树的垂序遍历

以上三题可共用一个模板(dfs记录数的col和row),不同之处就是使用哈希表的时候调整一下key和value:

# 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 verticalTraversal(self, root: Optional[TreeNode]) -> List[List[int]]:dic=defaultdict(list)def dfs(node,row,col):if node is None:returndic[col].append((row,node.val))dfs(node.left,row+1,col-1)dfs(node.right,row+1,col+1)dfs(root,0,0)ans=[]for _,i in sorted(dic.items()):i.sort()ans.append([j for _,j in i])return ans

145. 二叉树的后序遍历

144. 二叉树的前序遍历

94. 二叉树的中序遍历

二叉树的前中后序遍历虽然是很基础的算法,但是我看到了一个很有意思的解题思路,特此记录一下:

# 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:"""#方法一white,gray=0,1ans=[]stack=[(white,root)]while stack:color,node=stack.pop()if node is None:continueif color==white:stack.append((white,node.right))stack.append((gray,node))stack.append((white,node.left))else:ans.append(node.val)return ans"""#方法二ans=[]def mid(node):if node is not None:mid(node.left)ans.append(node.val)mid(node.right)mid(root)return ans

236. 二叉树的最近公共祖先

解题思路,先判断两个节点是否处于同一深度,如果不是同一深度,则让更深的节点向上移动至同一深度,随后两节点一同向上移动,直到两节点的父节点是同一节点时停止,这样就找到了最近公共祖先:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def find_depth(self, root, node):if not root:return 0if root == node:return 1left_depth = self.find_depth(root.left, node)right_depth = self.find_depth(root.right, node)if left_depth > 0:return left_depth + 1elif right_depth > 0:return right_depth + 1else:return 0def find_parent(self, root, node):if not root or not node:return Noneif root.left == node or root.right == node:return rootparent = self.find_parent(root.left, node)if not parent:parent = self.find_parent(root.right, node)return parentdef lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':depth_p, depth_q = self.find_depth(root, p), self.find_depth(root, q)while depth_p > depth_q:p = self.find_parent(root, p)depth_p -= 1while depth_q > depth_p:q = self.find_parent(root, q)depth_q -= 1while q != p:p = self.find_parent(root, p)q = self.find_parent(root, q)return p

这篇关于记录一下最近遇到的几个二叉树的题型(附好用的遍历模板)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713328

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.