数据结构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函数进行介绍。

相关推荐
quaer5 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
xys_6789 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code9 小时前
Java动态数组(一)
java·数据结构·windows
Code_Solitude12 小时前
传智杯备赛代码整理(前4题)
数据结构·算法
Jasmine_llq13 小时前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
辛苦才能13 小时前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
JasmineX-114 小时前
数据结构(笔记)——顺序栈
c语言·数据结构·笔记
凉茶钱15 小时前
list:哨兵节点,const_iterator 和 const iterator的区别与迭代器失效
数据结构·c++·list
敲代码的苦1317 小时前
头歌数据结构-排序的实现及其应用
数据结构
有同事要进步18 小时前
Leecode第68题:x的平方根
java·数据结构·算法