数据结构——二叉树四种遍历的实现-1

简介: 数据结构——二叉树四种遍历的实现

一、树的概念

1、树的定义

1)树

 树是 n(n≥0) 个结点的有限集合。当 n>0 时,它是一棵非空树,满足如下条件:

   1)有且仅有一个特定的结点,称为根结点Root;

   2)除根结点外,其余结点分为 m 个互不相交的有限集合 T1、T2、…………、Tm,其中每一个 Ti(1≤i≤m) 又是一棵树,并且为根结点 Root 的子树。如图所示,代表的是一棵以 a 为根结点的树。

3ed4f07cbbd36d011442c9a969af3178_4c53f2ae8b04462ba210dde4b0f54ada.png

2)空树

 当 n=0,也就是 0 个结点的情况也是树,它被称为空树。


3)子树

 树的定义用到了递归的思想。即树的定义中还是用到了树的概念,如图所示,T1 和 T2 就是结点 a 的子树。结点 d、g、h、i 组成的树又是结点 b 的子树等等。

9054f4ba1f3d9eca356c874f20d62209_b5ab603480984ea7a8e9eda53f02064e.png

 子树的个数没有限制,但是它们一定是互不相交的,如下图所示的就不是树。因为在这两个图中,a 的子树都有相交的边。

0691012b7ad2d5f5d8d51a92dda593ad_2d3b31e308fc45d2bc45355c8d5eef07.png

2、结点的定义

 树的结点包含一个 数据域 和 m 个 指针域 用来指向它的子树。结点的种类分为:根结点、叶子结点、内部结点。结点拥有子树的个数被称为 结点的度。树中各个结点度的最大值被称为 树的度。


1)根结点

 一棵树的根结点只有一个。


2)叶子结点

 度为 0 的结点被称为 叶子结点 或者 终端结点。叶子结点的不指向任何子树。


3)内部结点

 除了根结点和叶子结点以外的结点,被称为内部结点。

69269692825e68972f3c3869f667b47e_865c4ab5e85a47bd92f3a7aea133b666.png

 如上图所示,红色结点 为根结点,蓝色结点 为内部结点,黄色结点 为叶子结点。


3、结点间关系

1)孩子结点

 对于某个结点,它的子树的根结点,被称为该结点的 孩子结点。

4157098aee8e3397a5915e6b463c9b04_22e50d0e845e499792644724226ec2f2.png

 如上图所示,黄色结点 d 是 红色结点 b 的孩子结点。


2)父结点

 而该结点被称为孩子结点的 父结点。

dad818bb012beb5f8820bcb4509c2ef9_8b1abf3572b8491ab0c80293f6509a9b.png

 如上图所示,蓝色结点 a 是 红色结点 b 的父结点。


3)兄弟结点

 同一父结点下的孩子结点,互相称为 兄弟结点。

b51c7863512887d314b479172c8156ca_28d360c3275b43e3818bd0bc12669ec1.png

 如上图所示,绿色结点 c 和 红色结点 b 互为兄弟结点。


4、树的深度

 结点的层次从根结点开始记为第 1 层,如果某结点在第 i 层,则它的子树的根结点就在第i+1 层,树中结点的最大层次称为 树的深度。

 如下图所示,代表的是一棵深度为 4 的树。

56309914d044a7ee9f05f3b007823525_ee7b863960e64bc08da5354f689d2007.png

5、森林的定义

 森林是 m 棵 互不相交的树的集合,对于树的每个结点而言,其子树集合就是森林。

 如图所示,b 和 c 两棵子树组成的集合就是一个森林。

964ba33e9e2a330a96d0b79546c664a1_c3736b6fba40402884ec901c1c1daf16.png

二、二叉树的概念

1、二叉树的性质

 二叉树是一种树,它有如下几个特征:

   1)每个结点最多 2 棵子树,即每个结点的孩子结点个数为 0、1、2;

   2)这两棵子树是有顺序的,分别叫:左子树 和 右子树;

   3)如果只有一棵子树的情况,也需要区分顺序,如图所示:

  b 为 a 的左子树;


 c 为 a 的右子树;


数据结构——二叉树四种遍历的实现-2

https://developer.aliyun.com/article/1507985

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