数据结构10:树和二叉树

文章目录

简介

前面我们讲到的线性表、队列和栈都是一对一的数据结构,下面我们要讲的树是一种一对多的数据结构----树。

树的严格定义如下:

树:树是n(n=>0)个节点的有限集。 n=0时成为空树。在任意一颗非空树中:(1)有且仅有一个称为根的节点;(2)当n>0时,其余节点可分为m(m>0)个互不相交的有限集T1、T2、T3、Tm,其中每个节点又是一棵树,并且称为根的子树。

树的结构图1所示:

在图1中,A作为树的根节点,它有B和C两个节点;同时B和C也是一颗树,分别有3个和2个节点。

树这种数据结构在实际中有很多的应用,例如文件目录,如图2所示。

二叉树

二叉树是一种特殊的树,它的每个节点上最多只能有两个子节点(简称为左孩子和右孩子),它的结构如3所示。A作为根节点,它的左孩子是B,右孩子是C;同时B和C也都是一棵树,D、E和F、G分别是它们的孩子。二叉树较为简单,并且易于理解,我将它作为重点,进行详细讲解。

二叉树中的术语

结点度 :节点所拥有的孩子的个数成为该节点的度,在二叉树中度的取值只能是0,1,2。图3中A、B、C它们的度为2,D、E、F、G的度为0。
叶节点 :度为0的节点成为叶结点或终端结点。图3中,D、E、F、G都为终端节点。
左孩子、右孩子、双亲 :树中一个结点的子树的根结点称为这个结点的孩子。这个结点称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。在图3中,D是B左孩子,E是B的右孩子,B是D和E的双亲,D和E互为兄弟。
结点的层数 :规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。在图3中,A的层数为1,B的层数为2,D的层数为3。
树的深度 :树中所有结点的最大层数称为树的深度。图3中的树就是一个深度为3的树。
满二叉树 :在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称作满二叉树。图3中的树就是一棵满二叉树。
完全二叉树 :一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为 i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。完全二叉树的特点是:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。完全二叉树如图4所示。

二叉树的性质

1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。

2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。

3:包含n个结点的二叉树的高度至少为log2(n+1)。

4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。

本节主要介绍了树的和二叉树的基本概念,并对二叉树中的术语和性质进行了简单的介绍。在下一章节中,我们将对二叉树的遍历方式、数据结构和API函数进行介绍。

相关推荐
potato_may1 小时前
链式二叉树 —— 用指针构建的树形世界
c语言·数据结构·算法·链表·二叉树
Mz12211 小时前
day07 和为 K 的子数组
数据结构
Albert Edison3 小时前
【项目设计】C++ 高并发内存池
数据结构·c++·单例模式·哈希算法·高并发
小许学java6 小时前
数据结构-模拟实现顺序表和链表
java·数据结构·链表·arraylist·linkedlist·顺序表模拟实现·链表的模拟实现
稚辉君.MCA_P8_Java7 小时前
Gemini永久会员 C++返回最长有效子串长度
开发语言·数据结构·c++·后端·算法
dragoooon348 小时前
[优选算法专题十.哈希表 ——NO.55~57 两数之和、判定是否互为字符重排、存在重复元素]
数据结构·散列表
稚辉君.MCA_P8_Java9 小时前
Gemini永久会员 go数组中最大异或值
数据结构·后端·算法·golang·哈希算法
会员果汁9 小时前
双向链式队列-C语言
c语言·数据结构
AI科技星10 小时前
张祥前统一场论:引力场与磁矢势的关联,反引力场生成及拉格朗日点解析(网友问题解答)
开发语言·数据结构·经验分享·线性代数·算法
C雨后彩虹10 小时前
最少交换次数
java·数据结构·算法·华为·面试