【数据结构入门指南】二叉树

【数据结构入门指南】二叉树



一、二叉树的概念

二叉树是一棵特殊的。一棵二叉树是结点的一个有限集合,该节点:

①:或者为空。

②: 由一个根节点加上两棵别称为左子树和右子树的二叉树组成。



从上图可以看出:

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

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


二、现实中的二叉树


三、特殊的二叉树

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

完全二叉树 :完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。


四、二叉树的性质

①: 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点。

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

③: 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2,则n0 = n2 +1。

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

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

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

五、二叉树的存储结构

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

5.1 顺序结构

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


5.2 链式结构

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


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


-【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典)

相关推荐
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 82: 环形子数组的最大和
java·数据结构·算法·leetcode·决策树·线性回归·深度优先
Code_Shark1 小时前
AtCoder Beginner Contest 426 题解
数据结构·c++·算法·数学建模·青少年编程
仰泳的熊猫1 小时前
LeetCode:698. 划分为k个相等的子集
数据结构·c++·算法·leetcode
豐儀麟阁贵1 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法
xlq223221 小时前
7(内存管理)(上)(了解)
c++
Jane-6667772 小时前
C语言——栈与队列
c语言·开发语言
richxu202510013 小时前
C语言<<超全.超重要>>知识点总结
c语言·开发语言
WBluuue3 小时前
数据结构与算法:摩尔投票算法
c++·算法·leetcode
MeowKnight9583 小时前
【C】使用C语言举例说明逻辑运算符的短路特性
c语言·1024程序员节
2401_858286113 小时前
OS36.【Linux】简单理解EXT2文件系统(2)
linux·运维·服务器·数据结构·文件系统·ext2