【数据结构】树的遍历

树的遍历

前序遍历

前序遍历是按照根节点->左子树->右子树的顺序进行遍历
在这里插入图片描述

图片来源维基百科深度优先遍历(前序遍历): F, B, A, D, C, E, G, I, H.

代码实现
递归
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# @param root TreeNode类 
# @return int整型一维数组
class Solution:def preorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
非递归
class Solution:def preorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []node_stack = []ans = []node_stack.append(root)while node_stack:node = node_stack.pop(-1)if node.right:node_stack.append(node.right)if node.left:node_stack.append(node.left)ans.append(node.val)return ans

牛客 BM23 二叉树的前序遍历

中序遍历

中序遍历是按照左子树->根节点->右子树的顺序进行遍历

在这里插入图片描述

图片来源维基百科深度优先遍历(中序遍历): A, B, C, D, E, F, G, H, I.

代码实现
递归
class Solution:def inorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
非递归
class Solution:def inorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []node_stack = []ans = []while node_stack or root:while root:node_stack.append(root)root = root.leftnode = node_stack.pop(-1)ans.append(node.val)root = node.rightreturn ans

牛客 BM24 二叉树的中序遍历

后序遍历

中序遍历是按照左子树->右子树->根节点的顺序进行遍历

在这里插入图片描述

图片来源维基百科深度优先搜索(后序遍历):A, C, E, D, B, H, I, G, F.

代码实现
递归
class Solution:def postorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []return self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val]
非递归
class Solution:def postorderTraversal(self , root: TreeNode) -> List[int]:# write code hereif not root:return []pre = Nonenode_stack = []ans = []while root or node_stack:# 每次先找到最左边的节点while root:node_stack.append(root)root = root.leftnode = node_stack.pop(-1)# 如果该元素的右边没有或是已经访问过if not node.right or node.right is pre:ans.append(node.val)pre = nodeelse:node_stack.append(node)root = node.rightreturn ans

层次遍历

层次遍历是按照从上往下、从左往右一层层进行遍历

在这里插入图片描述

图片来源维基百科广度优先遍历 - 层次遍历:F, B, G, A, D, I, C, E, H.

方法
  1. 判断二叉树是否为空,空树返回空列表。
  2. 建立辅助队列,根节点入队。
  3. 每次进入一层,统计队列中元素的个数。因为每当访问完一层,下一层作为这一层的子节点,一定都加入队列,而再下一层还没有加入,因此此时队列中的元素个数就是这一层的元素个数。
  4. 每次遍历一层对应元素数量的节点,将其依次从队列中弹出,数值加入该层结果列表,若存在子节点,依次加入队列排队等待访问。
  5. 访问完这一层的元素后,将这个一维数组加入二维数组中,再访问下一层。
代码实现
class Solution:def levelOrder(self , root: TreeNode) -> List[List[int]]:# write code hereif not root:return []node_queue = []ans = []node_queue.append(root)while node_queue:ans_row = []n = len(node_queue)for i in range(n):node = node_queue.pop(0)ans_row.append(node.val)if node.left:node_queue.append(node.left)if node.right:node_queue.append(node.right)ans.append(ans_row)return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Office提示内存或磁盘空间不足

Office提示内存或磁盘空间不足 Office提示内存或磁盘空间不足,可以试试以下方法,不管用不要骂我 打开选项 点击信任中心 在受保护的视图中将以下选项取消勾选后确定,关掉软件重新打开

Java实现责任链模式

责任链模式是一种设计模式,用于处理请求的解耦。在责任链模式中,多个对象都有机会处理请求,从而避免了请求发送者和接收者之间的直接依赖关系。每个处理者都可以决定是否处理请求以及将请求传递给下一个处理者。 简介 责任链模式由一条链组…

服务容错-熔断策略之断路器hystrix-go

文章目录 概要一、服务熔断二、断路器模式三、hystrix-go3.1、使用3.2、源码 四、参考 概要 微服务先行者Martin Fowler与James Lewis在文章microservices中指出了微服务的九大特征,其中一个便是容错性设计(Design for failure)。正如文章中提到的,微服…

Python打印Python环境、PyTorch和CUDA版本、GPU数量名称等信息

代码: import torch import platformgpu_num torch.cuda.device_count() torch_version torch.__version__ python_version platform.python_version()print("Python Version: Python %s" % python_version) print("PyTorch Version: %s" %…

Spring之推断构造方法源码

文章目录 一、 简介1. 内容回顾2. Spring推断构造方法 二、 源码分析 一、 简介 1. 内容回顾 前面分析了Spring的Bean的生命周期的源码,然后分析了依赖注入源码,以及依赖注入的过程中循环依赖Spring的解决方案。在介绍Bean的生命周期中,我们…

三维模型的几何坐标纠正应用探讨

三维模型的几何坐标纠正应用探讨 倾斜摄影三维模型数据的几何坐标纠正应用分析 近年来,倾斜摄影技术在三维数据采集设备中得到广泛应用。倾斜摄影技术通过在飞行平台上搭载多台传感器,从不同角度采集影像,相比传统的摄影测量,倾斜…

每日算法打卡:数的三次方根 day 7

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码 原题链接 790. 数的三次方根 题目难度:简单 题目描述 给定一个浮点数 n,求它的三次方根。 输入格式 共一行,包含一个浮…

C++_虚析构

介绍 1.只有虚析构 (PS:没有虚构造) 2.加与不加 virtual关键词 的区别 2.1如果父类的析构函数 不是虚析构,则父类指针指向子类时,delete掉父类的指针 (PS:则效果为 只调用父类的析构的函数,不调用子类的析构函数) 2.2 如果父类的析构函数 是虚…

第17课 为rtsp流加入移动检测功能

在上节课,我们成功拿到了rtsp视频和音频流,在第13课,我们为普通的usb摄像头加上了移动检测功能,那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢?答案是肯定的,在usb摄像头检测中&#xff0…

vue结合Cesium加载gltf模型

Cesium支持什么格式? Cesium支持的格式包括:3D模型格式(如COLLADA、gITF、OBJ)、影像格式(如JPEG、PNG、GeoTIFF)、地形格式(如STL、Heightmap)、矢量数据格式(如GeoJSON…

css计时器 animation实现计时器延时器

css计时器 animation实现计时器延时器 缺点当切页面导航会休眠不执行 最初需求是一个列表每个项目都有各自的失效时间 然后就想到 计时器延时器轮询等方案 这些方案每一个都要有自己的计时器 感觉不是很好 轮询也占资源 然后突发奇想 css能不能实现 开始想到的是transition测…

初识Linux shell

Linux初探 Linux系统可以划分为4个部分: Linux内核:Linux系统的核心,控制着系统的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。 内核主要功能: 系统内存管理:内核通过硬件上称为交换…

labelImg的安装与使用

目录 1、查看本机是否安装labelImg 2、安装labelImg 3、创建自己的数据集 3.1 建立新文件夹 3.2 打开labelImg 注意:出现闪退的情况处理。 4、文件格式转换 4.1 修改文件夹路径 4.2 新建datasets文件夹 4.3 修改图片路径 4.4 执行 1、查看本机是否安装la…

【Origin绘图1】环形图

环形图绘制 Origin绘制环形图案例 MATLAB绘制环形饼状图案例 参考 环形图如下,可分析不同年份各组分变化情况: Origin绘制环形图 貌似对Origin版本有要求,下载的2019版并无环形图绘制工具。因此,重新下载了2022版本。 案例 第…

Python 利用PYQT5设计基于RSA算法盲签名的匿名化电子支付系统设计与实现

基于RSA算法的盲签名算法 David Chaum 于1982年提出盲签名的概念,并利用RSA算法设计了第一个盲签名方案. 该方案的安全性基于大整数分解问题 盲签名的步骤 1.密钥生成 签名者执行以下步骤生成密钥对: ①签名者选择两个大素数p,q, 计算npq&#xff0…

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

前言 英特尔公司发行的模型部署工具OpenVINO™模型部署套件,可以实现在不同系统环境下运行,且发布的OpenVINO™ 2023最新版目前已经支持MacOS系统并同时支持在苹果M系列芯片上部署模型。在该项目中,我们将向大家展示如何在MacOS系统、M2芯片的…

编写一个简单的服务和客户端(C++)

背景 当节点使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由.srv文件确定。 这里使用的例子是一个简单的整数加法系统;一个节点请求两个整数之和,另一个节点响应结果。 …

基于云平台技术的车辆远程诊断浅谈

基于云平台技术的车辆远程诊断浅谈 一、引言 随着汽车工业的不断发展,车辆故障诊断技术的需求日益增长。传统的车辆故障诊断方式已经无法满足现代汽车对高效、智能的追求。基于云平台技术的车辆远程诊断创新,为汽车故障诊断带来了新的解决方案。 二、…

【linux】docker基本概念和基础指令操作(镜像、容器)

docker docker镜像 images xxxx(名称):xxxx(版本号) 每一个image可以生成若干个容器(container),所有用相同镜像生成的容器环境完全一样 每一个容器都是一个完全独立的云端服务器 镜像指令 docker pull ubuntu:20.04 #拉取一个镜像 doc…

鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本&#…