二叉树——数据结构

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

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; // 当前节点值域

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

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

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

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

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

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

我们下次再见喽!

相关推荐
AI科技星8 分钟前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
橘颂TA10 分钟前
【剑斩OFFER】算法的暴力美学——leetCode 946 题:验证栈序列
c++·算法·leetcode·职场和发展·结构与算法
闻缺陷则喜何志丹12 分钟前
【状态机动态规划】3686. 稳定子序列的数量|1969
c++·算法·动态规划·力扣·状态机动态规划
寻星探路23 分钟前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
余瑜鱼鱼鱼24 分钟前
Java数据结构:从入门到精通(十)
数据结构
wen__xvn24 分钟前
力扣第 484 场周赛
算法·leetcode·职场和发展
好奇龙猫29 分钟前
【大学院-筆記試験練習:线性代数和数据结构(5)】
数据结构·线性代数
YuTaoShao36 分钟前
【LeetCode 每日一题】865. 具有所有最深节点的最小子树——(解法一)自顶向下
算法·leetcode·职场和发展
爱吃生蚝的于勒37 分钟前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim
寻星探路1 小时前
【算法专题】哈希表:从“两数之和”到“最长连续序列”的深度解析
java·数据结构·人工智能·python·算法·ai·散列表