二叉树——数据结构

这次我们来学习一下数据结构中的二叉树

1. 二叉树的概念及结构

1.1 二叉树的定义

定义:所有结点的度小于等于2的树。

上图中可以看出

  1. 二叉树不存在度大于2的结点
  2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

任意二叉树都是由以下几种情况复合而成的

1.2 特殊的几种二叉树

完全二叉树

完全二叉树。一棵高度为h的二叉树, 除最后一层以外的其他所有层上的结点数都达到最大值,而最后一层上的所有结点 分布在该层最左边的连续的位置 上。

完全二叉树有如下特点,叶子结点只能在层次最大和次大的两个层次上出现。对任一结点,如果其左子树的高度为m,则其右子树的高度必为m或者m-1。

满二叉树

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

注意:满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树!!!

扩充二叉树

把原二叉树所有结点中出现空的子树的位置都增加特殊的结点--空树叶,得到的二叉树就是扩充二叉树。

2.二叉树的性质

1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2⁽ⁱ⁻¹⁾ 个结点。

2.若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2ʰ-1。

3.对任何一棵二叉树,如果度为0其叶结点个数为n₀,度为2的分支结点个数为n₂,,则有n₀=n₂+1

4.若规定根节点的层数为1,具有n个结点的满二叉树的深度, h=log₂(n+1)。

(ps:log₂(n+1))是 log以2为底,n+1为对数)

5.对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有结点从0开始编号,则对于序号为 i 的结点有:

  • **若i>0,i 位置节点的双亲序号:(i-1)/2;**i=0,i为根节点编号,无双亲节点
  • 若2l+1<0,左孩子序号:2i+1,2i+1 >=n 否则无左孩子
  • 若2i+2<0,右孩子序号:21+2,2l+2>=n否则无右孩子

3. 二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

1. 顺序存储

顺序结构存储就是使用数组来存储 ,一般使用数组只适合表示完全二叉树 ,因为不是完全二叉树会有空间的浪费。而现实中使用中++只有堆才会使用数组来存储++ 。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树

2. 链式存储

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

cpp 复制代码
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; // 当前节点值域

少年没有乌托邦,心向远方自明朗!

如果这个博客对你有帮助,给博主一个免费的点赞就是最大的帮助❤

欢迎各位点赞,收藏关注 哦❤

如果有疑问或有不同见解,欢迎在评论区留言❤

后续会继续更新大连理工大学 相关课程和有关数据结构 的内容和示例

点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

我们下次再见喽!

相关推荐
星空露珠3 分钟前
迷你世界脚本文字板接口:Graphics
数据结构·游戏·lua
eason_fan3 分钟前
前端手撕代码(bigo)
算法·面试
302wanger16 分钟前
ARTS-算法-长度最小的子数组
算法
lizz3141 分钟前
机器学习中的线性代数:奇异值分解 SVD
线性代数·算法·机器学习
_星辰大海乀43 分钟前
LinkedList 双向链表
java·数据结构·链表·list·idea
MSTcheng.1 小时前
【C语言】动态内存管理
c语言·开发语言·算法
不去幼儿园1 小时前
【启发式算法】Dijkstra算法详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法·图搜索算法
serve the people1 小时前
神经网络中梯度计算求和公式求导问题
神经网络·算法·机器学习
闻缺陷则喜何志丹1 小时前
【二分查找、滑动窗口】P10389 [蓝桥杯 2024 省 A] 成绩统计|普及+
c++·算法·蓝桥杯·二分查找·滑动窗口·洛谷·成绩
星空露珠2 小时前
迷你世界脚本显示板管理接口:DisPlayBoard
数据结构·游戏·lua