【数据结构】特殊的二叉树及其两种存储结构

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


一、二叉树的定义

​ 了解到树结构之后介绍一下二叉树首先我们来做个游戏我在纸上巳经写好了一个l00以内的正整数数字请大家想办法猜出我写的是哪一个?注意你们猜数字不能超过7次我的回答只会告诉你你给的答案 是“大了”还是“小了”。这个游戏在—些电视节目中猜测-些商品的定价时常会使用。我看到过有些人是一点一带你地数字累加的比如5、l0、l5、20这样猜这样的猜数策略太低级了,显然是没有学过数据结构和算法的人才做得出的事。

​ 这是一种很经典的折半查找算法如果我们用折半的办法就一定可以在七次之内猜出结果。

在这里插入图片描述

二叉树是nn>0个节点的有限集合该集合可能为空或者有一个根节点和两颗互不相交的、分别成为根节点的左子树和又子树的二叉树组成。

在这里插入图片描述

由上图可以看出

  • 二叉树每个结点最多由两个字数二叉树不存在度大于2的结点
  • 二叉树的子树有左右之分次序不能颠倒因此二叉树是有序的。
  • 任意的二叉树都是由以下几种情况复合而成的

在这里插入图片描述

二、特殊的二叉树

**斜树**所有结点都向左斜就叫左斜树所有结点向右斜就叫右斜树。两者都称为斜的树。

**满二叉树**一个二叉树如果每一个层的结点数都达到最大值则这个二叉树就是满二叉树。也就是说如果一个二叉树的层数为K且结点总数是2^k-1 则它就是满二叉树

**完全二叉树**对一颗具有n个结点的二叉树按层序编号如果编号为i1≤i≤n的结点与同样 深度的满二叉树中编号为i的结点在二叉树中位置完全相同则这棵二叉树称为完全二叉树。
在这里插入图片描述

这里有一张非常有意思的图片堪称现实版的标准二叉树。
在这里插入图片描述

三、二叉树的存储结构

二叉树可以使用顺序结构也可以使用链式结构。

1.顺序结构存储

​ 顺序结构通常只适用于完全二叉树因为不是完全二叉树会有空间的浪费现实中只有堆才用数组来存储二叉树顺序存储在物理上是一个数组在逻辑上是一个二叉树。

在这里插入图片描述

2.链式结构存储

​ 二叉树的链式存储结构是指用链表来表示一棵二叉树即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成数据域和左右指针域左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链当前只涉及到二叉链后面其他的树结构会用到三叉链红黑树等。

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
 struct BinTreeNode* _pParent; // 指向当前节点的双亲
 struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; 				// 当前节点值域
}

img

✨本文收录于数据结构理解与实现

下期带来二叉树的理解与实现。如果文章对你有帮助记得点赞收藏关注。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6