数据结构14————二叉树的定义性质及储存
文章目录
一.内容
- 二叉树的定义
- 二叉树的性质
- 二叉树的存储
二.二叉树的定义
1.形式化定义
二叉树(Binary Tree)是n(n>=0)个节点组成的集合,该集合或者为空集(空二叉树),或者由一个根节点和两颗互不相交的,分别称为根节点的左子树和右子树的二叉树组成。
2.举例
如图就是一个典型的二叉树,二叉树T,根节点为A,A的左子树为T1,右子树为T2,同时左右子树都是一个二叉树。
3.二叉树的特点
a.每个节点最多右两个节点,所以二叉树中不存在度大于2的节点
b.二叉树的左右子树是有次序的,不可以随意颠倒
c.即使节点只有一个子树,也要区分是左子树,还是右左子树
d.二叉树具有五种基本形态:
- 空二叉树
- 只有一个根节点
- 根节点只有左子树
- 根节点只有右子树
- 根节点左右子树都有
小细节:3个节点可以组成几种不同的二叉树?答案是5种
三.二叉树的性质
- 在二叉树的第i层至多有2^(i-1)个节点
- 深度为K的二叉树至多有2^K - 1个节点
- 对任意一颗二叉树T,如果其叶子节点数为n0,度为2的节点为n2,n0=n2+1
证明:设度为节点总数为n,n0是叶子节点(度为0),n1是度为1的节点,n2是度为2的节点。所以有n = n0+n1+n2;
当一个节点为n时,从节点的进入情况看,除每个根节点外,每个节点都有一根连接线进入节点,所以一共有n-1个连接线.从节点的分支看,度为2的节点分支出去两根连接线,度为1的节点分支出去一根连接线.所以有n-1=2n2+n1
综上所述:n=2n2+n1+1=n0+n1+n2,所以有n0=n2+1
-
具有n个节点的完全二叉树的深度为[log2n]+1([X]表示不超过X的最大整数)
-
如果对一颗有n个节点的完全二叉树(其深度为[log2n]+1)的节点按照层序编号(从第一层到第[log2n]+1),每层从左到右),对任一节点i(1<=i<=n)
- 如果i=1,则节点i是二叉树的根,无双亲;如果i>i,其双亲是节点的[i/2]
- 如果2i>n,则节点i无左孩子(节点i为叶子节点),否则其左孩子为是节点的2i
*如果2i+1>b,则节点i无右孩子,否则其右孩子为节点的2i+1
完全二叉树的定义
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1)的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
四.二叉树的存储
二叉树的存储和之前的线性表一样,有两种存储方式,顺序(数组)和链表
1.二叉树的顺序存储结构
将一个完全二叉树按照层次编号,按照编号存入数组中,如图所示
对于不是完全二叉树的二叉树,将它也按照二叉树的规则编号,不存在的的节点设置为^ 如图所示
缺点,对于一些特殊二叉树特别浪费空间
2.二叉树的链式存储
对于每个节点,为他设计一个数据域,两个指针域,左指针指向它的左孩子,右指针指向它的右孩子。如图所示
关于二叉树的遍历和存储代码实现,见下一篇博客
五.参考资料
<大话数据结构>
<数据结构与算法>