学好数据结构和算法 —— 非线性结构(中) (2)

满二叉树:一棵深度为k且有2k - 1个结点的二叉树称为满二叉树。满二叉树上每一层的结点数都是最大节点数。

完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中自上而下,从左往右编号完全相同的时候,就是完全二叉树。

注:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。

学好数据结构和算法 —— 非线性结构(中)

二叉树的特性

(1)二叉树的第i层上至多有2i-1个结点(i >= 1);

(2)深度为k的二叉树至多有2k - 1个结点(k >= 1);

(3)对于任意一棵二叉树T,如果其终端节点数为n0,度为2的结点数为n2,则=n2 + 1

二叉树的存储结构 1、顺序存储结构

有以下3中二叉树:

学好数据结构和算法 —— 非线性结构(中)

按顺序存储的时候,用一组连续的存储空间从上至下,从左至右,将二叉树编号 i 的元素存储在对应1维数组的下标为 i-1 的位置,对应的存储结构为:

学好数据结构和算法 —— 非线性结构(中)

数组里元素为0的表示没有此结点,可以看出:顺序存储结构适合于完全二叉树,对于非完全二叉树比较浪费空间,图(3)只有四个结点对于最坏情况下,需要的空间却是最多的。

因此,在最坏情况下,一个深度为k且只有k个结点的单支树(树中不存在度为2的结点)需要的存储长度是2k - 1的一维数组。

2、链式存储结构

由二叉树的定义得知:二叉树的结点由一个数据元素 和 分别指向左子树、右子树的两个分支构成。有时候为了方便,也可以加个双亲结点的指针域,如下图所示:

学好数据结构和算法 —— 非线性结构(中)

只含有左右子树的结点 和 含有左右子树和双亲指针的结点的数据结构:

学好数据结构和算法 —— 非线性结构(中)

只含有左右子树指针的链式结构称为二叉链表;含有左右子树指针和双亲结点指针的链式结构称为三叉链表

如下2种结构的二叉树:

学好数据结构和算法 —— 非线性结构(中)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwwx.html