快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

11|二叉树:深度优先和广度优先遍历是什么?

你好,我是王健伟。
今天我们来聊一个非常重要的二叉树遍历问题。
二叉树的遍历,就是指从根节点出发,按照某种次序(某条搜索路径)依次访问二叉树中的所有节点,使每个节点都被访问且只被访问一次。“访问”的含义比较广泛,比如对节点做各种处理,显示节点所保存的数据等等。
前面在讲解线性表时,遍历是很简单的事,但二叉树是非线性结构,每个节点都可能有 0~2 个子节点,所以,我们需要让二叉树的节点排列成一个线性队列的形式,才能够顺利地访问到各个节点。
二叉树的经典遍历方法有三种:前序遍历、中序遍历、后序遍历。这三种遍历方式也称为深度优先遍历深度优先搜索,见名知意,深度优先遍历就是沿着每一个分支路径进行深入访问。我们先从它们开始说起。

什么是前序遍历、中序遍历、后序遍历?

图 1 列出了三个 2 层的二叉树,其中第 2 个二叉树没有右子树,第 3 个二叉树没有左子树。
图1 高度为2的满二叉树、缺少右子树的二叉树、缺少左子树的二叉树
先说前序遍历,也叫先序遍历或者先根遍历。如果二叉树为空,则直接返回,否则从根节点开始。每个节点都是先访问该节点,比如显示该节点的数据,再访问该节点的左子树,最后访问该节点的右子树。访问的顺序总结成口诀就是“根左右”。
说回到图 1。三类二叉树的遍历顺序,按照“根左右”的口诀,就应该是:ABC,AB,AC。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了二叉树遍历的基本原理和实现方法,包括深度优先遍历(前序、中序、后序)和广度优先遍历(层序遍历)。通过讲解不同遍历方式的顺序和特点,读者可以快速了解二叉树遍历的基本概念。此外,文章还探讨了遍历顺序反推二叉树的问题,以及扩展二叉树的特点和应用。通过分析已知遍历序列无法唯一确定一棵二叉树的情况,以及已知前序和中序遍历序列或中序和后序遍历序列可以唯一确定一棵二叉树的情况,读者可以深入理解遍历序列对于确定二叉树的重要性。文章还提供了扩展二叉树的概念,以及给出了扩展二叉树的前序或后序遍历序列可以唯一确定一棵二叉树的结论,读者可以进一步了解扩展二叉树的特点和应用。总之,本文内容涵盖了二叉树遍历的基本原理、遍历顺序反推二叉树的问题以及扩展二叉树的特点,对于想要深入了解二叉树相关概念的读者来说,是一篇值得阅读的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Bruder_Jin
    大二系统学过数据结构,自以为学的还不错,现在面临考研,发现这个课程讲到很多我已经遗忘的东西,真的好适合重新将数据结构体系建筑起来,期待后面的文章。但这两节二叉树的代码不多,期待后面文章的可以提供更多的代码

    作者回复: 树这里代码最多的是红黑树

    2023-06-05归属地:广东
    1
  • 阿阳
    本节课的遍历顺序确定一棵二叉树,扩展二叉树,还有层序遍历确定一棵二叉树,真是解决了多年的疑惑。原来这才是构建二叉树的基础理论所在。 越来越发现,这种基础课程确实需要沉下去,不放过主要细节,才能真正有所收获。
    2023-05-25归属地:江苏
    2
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部