数据结构--树&二叉树

本文介绍了树和二叉树的概念,包括树的节点类型、度与层次、树的特点,以及二叉树的分类、储存方式和遍历方法。通过详细解释和实例,帮助读者深入理解这些基本数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        是一种数据结构,它是由有限节点组成一个具有层次关系的集合,类似一颗倒置的大树。

当节点数为 0 时,该树被称为空树

树的节点

定义:使用树节点储存的每一个数据元素都被称为节点。

  • 根节点:每个节点只有一个前件,称为父节点,而没有前件的节点称为根节点。一颗非空的树有且仅有一个根节点
  • 子节点:每个节点可以有多个后件,称为该节点的子节点。
  • 叶子节点:没有后件的节点称为叶子节点。
  • 子树:树的其中一个节点及其下面所有节点构成的树称为子树。

度与层次

以下图树为例:

 

节点

  • 度:节点的度是指该节点的孩子数量。例如:A节点的度为3,B节点的度为2。
  • 层次:从根节点开始, 根为第 1 层, 根的子节点为第 2 层, 以此类推。例如:G节点在第三层。
  • 深度:根节点到该节点路径所包含的边数。例如:M节点的深度为3,F节点的深度为2。
  • 高度:该节点到叶子节点最长路径的边数。例如:D节点的高度为2。

  • 度:一颗树所包含所有节点的度的最大值。例如:该树的度为3。
  • 高度(深度):一棵树节点的最大层次。例如:该树的高度(深度)为3。

树的特点

  1. 一棵树中任意两个节点有且仅有一条路径相连,不包含回路。
  2. 一个有n个节点的树,一定有n-1条边。

二叉树

        二叉树是一种特殊的有序树,二叉树的度为2。二叉树的子节点又被分为:左孩子节右孩子节点

       

        如上图所示,左图树的度为2,为二叉树。右图树的度为3,非二叉树

        其中在左图中,节点4为节点2的左孩子节点,节点5为节点2的右孩子节点。

二叉树的分类

        二叉树被分为:满二叉树完全二叉树

满二叉树

        概述:当一颗二叉树除叶子节点外,其余所有节点的度都为2,那么这颗树就被称为满二叉树。如下图所示:

 

性质:

  • 假设一颗满二叉树的高度为 n,那么该树的总节点数为:2^{n}-1。如上图:该树高度为4,则总节点数为15
  • 一颗满二叉树的第 i 层节点数为:2^{i-1}。如上图:第三层的节点数为4
  • 具有 x 个节点的满二叉树,它的叶子节点个数为:\frac{x+1}{2},高度(深度)为 \log_{2}{x+1}。如上图:该树总节点数为15,则该树的叶子节点数为8,高度(深度)为4

 完全二叉树

       概述:完全二叉树是指当二叉树除过最后一层为满二叉树且最后一层的节点从左到右依次分布,如下图所示:

性质:

  • 父节点与子节点的序号有对应关系。父节点为 i 时 ,左孩子节点为 2i 右孩子节点为 2i+1。例如上图中节点为2的左孩子节点为4,右孩子节点为5

二叉树的储存

        二叉树的储存分为:链式储存和顺序储存

链式储存

        二叉树的链式储存与链表类似,依靠指针管理节点之间的关联,不需要连续的存储空间,每个节点包括3个属性:数据(Data)、左孩子节点指针(Left)、右孩子节点指针(Right)

 顺序储存

        二叉树的顺序储存,是指用顺序表(数组)储存,在顺序储存中,数组的每一个位置仅储存节点的数据,不需要储存节点的指针,而子节点的储存位置是根据完全二叉树的性质 “父节点为 i{\color{DarkGreen} } 时 ,左孩子节点为 2i{\color{DarkGreen} } ,右孩子节点为 2i+1{\color{DarkGreen} } ” 来确定下标的。例如:父节点在数组中的下标为i=3,那么该节点的左孩子节点在数组中的下标就是 2i=6,而右孩子节点在数组中的下标为 2i+1=7

        顺序储存更适用与储存完全二叉树,而不适应与储存普通二叉树,原因是储存完全二叉树会使二叉树中元素在数组中连续储存,而储存普通二叉树容易在数组中出现空隙,从而导致内存浪费。如图所示:

 二叉树的遍历 

二叉树的遍历分为:前序遍历、中序遍历、右序遍历

  • 前序遍历也叫先序遍历,就是先输出根节点,在遍历左子树,最后遍历右子树:根节点=>左子树=>右子树
  • 中序节点是先递归中序遍历左子树,在输出根节点,最后递归中序遍历右子树:左子树=>根节点=>右子树
  • 后序节点是先递归后序遍历左子树,在递归后序遍历右子树,最后输出根节点:左子树=>右子树=>根节点

以下图为例:

  1. 前序遍历(根左右):ABDECFG
  2. 中序遍历(左根右):DBEAFCG
  3. 后序遍历(左右根):DEBFGCA

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾远望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值