二叉树的定义
二叉树(Binary Tree)是一种树型结构,每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的性质
- 在二叉树的第i层上至多有2的i-1次方个结点(i>=1)
如图所示,第一层最多1个,第二层最多2个,等等 - 深度为k的二叉树至多有2的k次方-1个结点(k>=1)
如图所示,其实就是性质1的每层相加得到总结点树,如果为2的三次方-1=7个结点 - 对任何一棵二叉树T,如果其终端结点数为m,度为2的结点数为n,则,m=n+1(不证明)
完全二叉树和满二叉树是两种特殊形态的二叉树
- 一颗深度为k且有2的k次方-1个结点的二叉树成为满二叉树,如图所示
- 一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树,如图所示
只要结点对应的数字是连续,即为完全二叉树
- 具有n个结点的完全二叉树的深度为[log2n]+1(向下取整)
- (最重要的性质来了),如果对一棵有n个结点的完全二叉树(其深度为[log2n]+1)的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1<=i<=n),有以下性质
性质一、如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)是结点[i/2」向下取整
性质二、若结点i有左孩子,那么左孩子一定为2i,反之若2i>n总结点,那么结点i一定没有左孩子
如图结点2的左孩子一定是2i,反之结点5,由于总结点为9,2i>9,所有结点5没有左孩子
性质三、如果2i+1>n,则结点无右孩子;否则其右孩子结点2i+1
二叉树的存储结构
顺序存储
基于数组存储,按照完全二叉树的编号存储,元素不存在,存0,