【开卷数据结构 】二叉树的遍历

简介: 【开卷数据结构 】二叉树的遍历

05d250eb22e3badf2cfb05fc5f2f91af_94536690f848438fab30aa17191a6ea2.png

🌺二叉树的遍历


Q:什么是二叉树的遍历?


A:二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次,且仅被访问一次。


Q:二叉树有几种遍历方法?


A:二叉树的遍历方法可以有很多种,如果限制了从左到右的习惯方式,那么主要分为以下四种:先序遍历,中序遍历,后序遍历,层序遍历。


🌺前序遍历


Q:什么是先序遍历


A:先序遍历就是先访问树的根节点,再访问树的左子节点,再访问右子节点。可以想象为,从一棵二叉树根节点为起点,沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果。


0a42ae1984fecab3c619992f4662d71e_1f01fe20aeb94d93b5d88de6c06639d5.png


如图:遍历的顺序为  ABDGHCEIF


🔺操作定义


若二叉树为空,则空操作返回,否则:


访问根节点

先序遍历左子树

先序遍历右子树


💬代码演示


void PreOrderTraversal(BiTree BT)
{
    if( BT != NULL ) 
    {
        printf(“%d\n”, BT->Data);        //对节点的数据进行打印          
        PreOrderTraversal(BT->Left);     //访问左子树
        PreOrderTraversal(BT->Right);    //访问右子树
    }
}


🌺中序遍历


Q:什么是中序遍历


A:中序遍历就是访问完所有左子数后再访问根节点,最后访问右子树,即左子树-根节点-右子树。中序遍历可以看成,二叉树每个节点,垂直方向投影下来,然后从左往右数,得出的结果便是中序遍历的结果。


637974752c38bdfd20481de5df6402d6_8ef2ae0fe07b4ef0b4dd944505596810.png


 如图:遍历的顺序为 GDHBAECF


🔺操作定义


若二叉树为空,则空操作返回,否则:


中序遍历左子树

访问根节点

中序遍历右子树


💬代码演示


void InOrderTraversal(BiTree BT)
{
    if(BT)
    {
        InOrderTraversal(BT->Left);
        printf("%d\n", BT->Data);
        InOrderTraversal(BT->Right);
    }
}


🌺后序遍历


Q:什么后序遍历


A:后序遍历就是先访问左子树和右子树,最后访问节点,即左子树-右子树-根节点。后序遍历可以看成围着树的外围绕一圈,若下面只有一个结点就摘下来,得出的结果便是后序遍历的结果。


c77482e6183f2e00ab56ec877e2a0329_b494e6837e654c59ae4f06387d80e2cb.png


如图:遍历的顺序为 GHDBIEFCA


🔺操作定义


若二叉树为空,则空操作返回,否则:


后序遍历左子树

后序遍历右子树

访问根节点


💬代码演示


void PostOrderTraversal(BiTree BT)
{
    if (BT)
    {
        PostOrderTraversal(BT->Left);
        PostOrderTraversal(BT->Right);
        printf("%d\n", BT->Data);
    }
}


🌺层序遍历


Q:什么层序遍历


A:层次遍历就是从根节点开始,一层一层,从上到下,每层从左到右,依次取值。


f580007de9044d6c20e6564a3a622ca5_3f8637fa07eb478885133e2ba08521b3.png


 如图:遍历的顺序为 ABCDEFGHL


💬代码演示


void LevelOrder(BiTree T){
  InitQueue(Q);    //初始化辅助队列
  BiTree p;
  EnQueue(Q,T);    //将根结点入队
  while(!IsEmpty(Q))
  {       //队列不空则循环
  DeQueue(Q,p);   //队头结点出队
  visit(p);    //访问出队结点
  if(p->1child!=NULL)
    EnQueue(Q,p->lchild);//左子树不空,则左子树根结点入队
  if(p->rchild!=NULL)
    EnQueue(Q,p->rchild);//右子树不空,则右子树根结点入队
  }
}


05d250eb22e3badf2cfb05fc5f2f91af_94536690f848438fab30aa17191a6ea2.png


本人不才,如有错误,欢迎各位大佬在评论区指正。有帮助的话还请【关注➕点赞➕收藏】,不行的话我再努努力💪💪💪    


相关文章
|
16天前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
39 12
|
16天前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
39 10
|
16天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
40 2
|
30天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
16天前
|
数据采集 存储 算法
【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
本文介绍了图的遍历算法,包括深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历通过递归方式从起始节点深入探索图,适用于寻找路径、拓扑排序等场景;广度优先遍历则按层次逐层访问节点,适合无权图最短路径和网络爬虫等应用。文中提供了C++代码示例,演示了如何实现这两种遍历方法,并附有测试用例及结果,帮助读者理解和实践图的遍历算法。
30 0
|
2月前
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
118 4
|
2月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
181 8
|
3月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
40 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
3月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
53 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
3月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
38 1

热门文章

最新文章