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

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

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


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


相关文章
|
19天前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
70 8
|
1月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
23 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
1月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
25 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
1月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
28 1
|
1月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
25 1
|
1月前
|
存储
【数据结构】二叉树链式结构——感受递归的暴力美学
【数据结构】二叉树链式结构——感受递归的暴力美学
|
1月前
|
存储 编译器 C++
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
|
1月前
|
存储 算法 调度
数据结构--二叉树的顺序实现(堆实现)
数据结构--二叉树的顺序实现(堆实现)
|
1月前
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解(三)
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解
|
1月前
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解(二)
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解