二叉树的遍历

简介: 遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:   ⑴访问结点本身(N),   ⑵遍历该结点的左子树(L),   ⑶遍历该结点的右子树(R)。   以上三种操作有六种执行次序:   NLR、LNR、LRN、NRL、RNL、RLN。   注意:

遍历方案

  从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:

  ⑴访问结点本身(N),
  ⑵遍历该结点的左子树(L),
  ⑶遍历该结点的右子树(R)。
  以上三种操作有六种执行次序:
  NLR、LNR、LRN、NRL、RNL、RLN。
  注意:
  前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。

三种遍历的命名

  根据访问结点操作发生位置命名:
  ① NLR: 前序遍历(PreorderTraversal亦称(先序遍历))
  ——访问根结点的操作发生在遍历其左右子树之前。
  ② LNR: 中序遍历(InorderTraversal)
  ——访问根结点的操作发生在遍历其左右子树之中(间),它也被叫做“对称序列”。
  ③ LRN: 后序遍历(PostorderTraversal)
  ——访问根结点的操作发生在遍历其左右子树之后。
  注意:
  由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为 先根遍历、中根遍历和后根遍历。

遍历算法

  1.中序遍历的 递归算法定义:
  若二叉树非空,则依次执行如下操作:
  ⑴遍历左子树;
  ⑵访问根结点;
  ⑶遍历右子树。
  2.先序遍历的递归算法定义:
  若二叉树非空,则依次执行如下操作:
  ⑴ 访问根结点;
  ⑵ 遍历左子树;
  ⑶ 遍历右子树。
  3.后序遍历得递归算法定义:
  若二叉树非空,则依次执行如下操作:
  ⑴遍历左子树;
  ⑵遍历右子树;
  ⑶访问根结点。

  4.层次遍历

 

前序(Pre-order Traversal)、中序(In-order Traversal)、后序遍历(Post-orderTraversal)和深度优先搜索的顺序类似,层序遍历(Level-order Traversal)和广度优先搜索的顺序类似。
前序和中序遍历的结果合在一起可以唯一确定二叉树的形态,也就是说根据遍历结果可以构造出二叉树

目录
相关文章
|
存储 算法 测试技术
大模型落地的必经之路 | GPTQ加速LLM落地,让Transformer量化落地不再困难
大模型落地的必经之路 | GPTQ加速LLM落地,让Transformer量化落地不再困难
466 0
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
824 3
|
3月前
|
JSON 监控 API
亚马逊Amazon商品详情API接口解析,josn数据参考
亚马逊商品详情API接口助力开发者高效获取商品信息,返回结构清晰的JSON数据,涵盖价格、描述、图片等关键字段。本文详解API调用方法与JSON格式,助您快速掌握商品数据抓取技巧,提升开发效率,适用于电商、数据分析等领域。
|
9月前
|
应用服务中间件 nginx Docker
配置Containerd运行时镜像加速器
containerd配置国内容器镜像加速器
3549 1
|
8月前
|
人工智能 自然语言处理 搜索推荐
现在最火的AI是怎么应用到体育行业的
AI在体育行业的应用日益广泛,涵盖数据分析、伤病预防、观众体验、裁判辅助等多个领域。通过传感器和可穿戴设备,AI分析运动员表现,提供个性化训练建议;预测伤病风险,制定康复方案;优化比赛预测和博彩指数;提升观众的个性化内容推荐和沉浸式观赛体验;辅助裁判判罚,提高准确性;发掘青训人才,优化训练计划;智能管理场馆运营和票务;自动生成媒体内容,提供实时翻译;支持电竞分析和虚拟体育赛事;并为运动员提供个性化营养和健康管理方案。未来,随着技术进步,AI的应用将更加深入和多样化。
|
机器学习/深度学习 安全 数据挖掘
安全地运行 Jupyter 服务
【8月更文第29天】Jupyter Notebook 是一种流行的交互式计算环境,广泛应用于数据分析、机器学习等领域。然而,随着 Jupyter 服务越来越多地被部署在网络环境中,安全问题变得日益重要。本文将介绍一些最佳实践,帮助您保护 Jupyter 服务器免受攻击和数据泄露的风险。
640 0
|
安全 Android开发 Kotlin
Android中LiveEventBus收不到消息?不妨试试本地广播
本文介绍在Android应用内使用本地广播(LocalBroadcast)进行组件间通信的方法,解决了Activity在onStop状态时接收不到消息的问题。本地广播比全局广播更安全高效,适用于同一应用内的通信。文章详细介绍了设置广播接收器、发送广播及注意事项,并提供了Kotlin代码示例。
208 3
|
12月前
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
949 0
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
331 0
io_uring之liburing库安装
io_uring之liburing库安装
1148 0