服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++超详细实现二叉树的遍历

C++超详细实现二叉树的遍历

2022-12-08 12:23锡兰Ceylan_ C/C++

本章将会详细讲解二叉树遍历的四种方式,分别为前序遍历、中序遍历、后续遍历和层序遍历。在学习遍历之前,会先带大家回顾一下二叉树的基本概念

二叉树的遍历

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

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

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

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

 

前序遍历

Q:什么是先序遍历

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

C++超详细实现二叉树的遍历

如图:遍历的顺序为 ABDGHCEIF

操作定义

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

  • 访问根节点
  • 先序遍历左子树
  • 先序遍历右子树

代码演示

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

 

中序遍历

Q:什么是中序遍历

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

C++超详细实现二叉树的遍历

如图:遍历的顺序为GDHBAECF

操作定义

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

  • 中序遍历左子树
  • 访问根节点
  • 中序遍历右子树

代码演示

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

 

后序遍历

Q:什么后序遍历

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

C++超详细实现二叉树的遍历

如图:遍历的顺序为GHDBIEFCA

操作定义

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

  • 后序遍历左子树
  • 后序遍历右子树
  • 访问根节点

代码演示

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

 

层序遍历

Q:什么层序遍历

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

C++超详细实现二叉树的遍历

如图:遍历的顺序为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);//右子树不空,则右子树根结点入队
	}
}

到此这篇关于C++超详细实现二叉树的遍历的文章就介绍到这了,更多相关C++二叉树遍历内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Ceylan__/article/details/124453242

延伸 · 阅读

精彩推荐
  • C/C++C语言与C++项目实现相互调用

    C语言与C++项目实现相互调用

    extern “c”的作用可以实现c语言和c++相互调用,本文就详细的介绍一下C语言与C++项目实现相互调用,感兴趣的可以了解一下...

    想学好编程的小菜鸟10542022-08-29
  • C/C++matlab模拟退火算法单约束车间流水线调度解决实现及示例

    matlab模拟退火算法单约束车间流水线调度解决实现及示例

    这篇文章主要为大家介绍了matlab模拟退火算法求解单约束车间流水线调度的实现及示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进...

    紫极神光6332022-09-09
  • C/C++linux c++ 服务器端开发面试必看书籍整理

    linux c++ 服务器端开发面试必看书籍整理

    这篇文章主要介绍了linux c++ 服务器端开发面试必看书籍整理,需要的朋友可以参考下...

    CTHON12592021-08-16
  • C/C++C++核心编程之类和对象详解

    C++核心编程之类和对象详解

    这篇文章主要介绍了C++编程进阶之类和对象用法等相关使用技巧,需要的朋友可以参考下,希望能够给你带来帮助...

    Gigi Princess12042021-12-29
  • C/C++C++中队列queue的用法实例详解

    C++中队列queue的用法实例详解

    队列先进先出,即只能在容器的末尾添加新元素,只能从头部移除元素,下面这篇文章主要给大家介绍了关于C++中队列queue用法的相关资料,文中通过示例代码介...

    KEPROM10872022-11-03
  • C/C++基于c++的中国象棋游戏设计与实现

    基于c++的中国象棋游戏设计与实现

    这篇文章主要介绍了基于c++的中国象棋游戏设计与实现,主要操作是possibleMove(int x, int y),通过整个棋盘每个位置上的信息、中国象棋的规则来获得位置(...

    biyezuopinvip9872022-10-09
  • C/C++C++ const引用、临时变量 引用参数详解

    C++ const引用、临时变量 引用参数详解

    下面小编就为大家带来一篇C++ const引用、临时变量 引用参数详解。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C++教程网11342021-04-27
  • C/C++C语言链表实现图书管理系统

    C语言链表实现图书管理系统

    这篇文章主要为大家详细介绍了C语言链表实现图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    威成天下9322021-06-18