一、二叉树的概念
二叉树是一种特殊的树形结构,主要的特点是每个结点最多有两个子树,且二叉树的子树有左右之分,次序不能颠倒。
几种特殊的树:
1.满二叉树
高度为h,结点总数为2^h-1个结点的二叉树就是满二叉树,如果对满二叉树进行层序编号(自上而下,自左而右,从1开始),那么对于一个编号为i的结点,其双亲结点的编号为i/2向下取整,若有左孩子则编号为2i,右孩子为2i+1.
2.完全二叉树
其每个结点的编号与满二叉树的编号一一对应则是完全二叉树,各结点与其双亲结点和孩子结点的编号关系同上。
3.二叉排序树
其左子树上的关键字均小于根结点的关键字,其右子树上的关键字均大于根结点上的关键字,同时,左子树和右子树又各是一棵二叉排序树。
4.平衡二叉树
树中任意一个结点的左子树右子树高度之差的绝对值不超过1.
5.正则二叉树
树中每个分支结点(有孩子结点)都有两个孩子。
二、二叉树的性质
1.非空二叉树上,叶结点的数量等于度为2的结点的数量再加1.
2.非空二叉树的第k层最多有2^(k-1)个结点(k>=1).
3.具有n个结点的完全二叉树的高度为向下取整。
三、二叉树的存储结构
1.顺序存储结构
二叉树用数组的形式进行存储,下标即为二叉树结点的编号。满二叉树和完全二叉树可使用该方式存储,既能节省空间,又能通过数组的下标体现结点在二叉树中的位置。但是对于一般的二叉树,该方法为了让结点的编号有逻辑,容易产生大量空结点,造成空间浪费。
2.链式存储结构
二叉树一般使用链式存储结构,通常二叉链表至少要包含:数据域data、左指针域lchild、右指针域rchild.
在n个结点的二叉树中,含有n+1个空链域。在线索二叉树中会运用到空链域。