二叉树(定义、类型、性质、存储结构)

本文介绍了二叉树的基本概念,包括定义、特殊类型的二叉树(斜二叉树、完美二叉树、完全二叉树),以及二叉树的重要性质。还探讨了二叉树的两种存储结构:顺序存储和链式存储,并提到了二叉树的操作和遍历算法。此外,提及了二叉搜索树、平衡二叉树、B树和B+树,以及哈夫曼树及其应用——哈夫曼编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树的定义
一个有穷的结点集合。 这个集合可以为空;若不为空,则它是由根结点和称为其左子树和右子树的两个不相交的二叉树组成。
*注意:二叉树的定义是一种递归定义;二叉树的子树有左右顺序之分 *

特殊的二叉树
①斜二叉树(Skewed Binary Tree)
即均为左子树或右子树。可继续分为斜右二叉树和斜左二叉树。下图为斜左二叉树。
在这里插入图片描述
②完美二叉树(Perfect Binary Tree) 或 满二叉树(Full Binary Tree)
在一棵二叉树中,如果所有分支结点都有左孩子结点和右孩子结点,并且叶结点都集中在二叉树的最下一层结点的孩子一定是都有或都没有。

③完全二叉树 (Complete Binary Tree)
若二叉树中最多只有最下面两层的结点的度数可以小于2,并且最下面一层的叶结点都依次排列在该层最边的位置上。
在这里插入图片描述
二叉树的几个重要性质
(举例式理解,理解式记忆。)
①一棵非空二叉树上第i层上至多有2^(i-1)个结点(i≥1)。
题例:已知一棵完全二叉树的第6层(设根为第1层)有8个叶节点,则该完全二叉树的节点个数最多是 111。
(本题为2009年全国考研题)

②一颗高度为k的二叉树至多有2^k - 1个结点(k≥1)。

③对于一棵非空的二叉树,如果叶子结点数为n0,度数为2的结点数为n2,则有: n0=n2+1
证明:设二叉树上叶节点数为n0,单分支节点数为n1,双分支节点数为n2,则总节点数n=n0+n1+n2。在一棵二叉树中,所有节点的分支数(即度数)应等于单分支节点数加上双分支节点数的2倍,即总的分支数=n1+2n2。
由于二叉树中除根节点以外,每个节点都有唯一的一个分支指向它,因此二叉树中有:总的分支数=总节点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1 即:n0=n2+1
其中,有一个关于树的重要基本性质:一棵n个结点的树有n-1条边。(n>=1)


在这里插入图片描述
其中的特殊符号为向下取整。

二叉树的存储结构
①顺序存储结构
二叉树的顺序存储结构中结点的存放次序是:对该树中每个结点进行编号,其编号从小到大的顺序就是结点存放在连续存储单元的先后次序。
顺序存储结构适用于完全二叉树,而一般的二叉树先用空节点补全成为完全二叉树,然后对结点编号后再顺序存储。一般二叉树也可以采用这种结构,但会造成空间浪费
在这里插入图片描述
在这里插入图片描述

//二叉树的顺序存储表示可描述为:
#define MAXNODE   100                  /*二叉树的最大结点数*/
typedef elemtype SqBiTree[MAXNODE]       /*1号单元存放根结点*/
SqBiTree bt;  /*即将bt定义为含有MAXNODE个elemtype类型元素的一维数组*/

②链表存储或链式存储
二叉树的链式存储结构是用指针来指示元素的逻辑关系,即用两个指针分别指向结点的左孩子和右孩子。二叉树中的每一个结点由三个域组成,数据域和两个指针域。结点结构定义如下:
在这里插入图片描述
其中,data表示值域,用于存储对应的数据元素,lchild和rchild分别表示左指针域和右指针域,用于分别存储左孩子结点和右孩子结点(即左、右子树的根结点)的存储位置。

//二叉树的二叉链存储表示可描述为:
typedef struct node{ 
ElemType data;     /* 存放结点的值,ElemType是元素的基本类型 */
struct node *lchild;  /* 指向左孩子结点指针*/
struct node *rchild;  /* 指向右孩子结点指针 */
} BTNode;

二叉树的一些基本操作,如:创建二叉树、找指定结点、找孩子结点、求二叉树的高度、输出二叉树。
二叉树的遍历(递归和非递归算法)

各种树
二叉搜索树/二叉排序树/二叉查找树
平衡二叉树(AVL Tree)
B-和B+树的定义、性质特点、举例说明
线索二叉树
哈夫曼树Huffman Tree及其应用——哈夫曼编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值