首先,在讲二叉树之前我们先来说说有关于树的一些术语:
- 结点:包含一个数据元素及若干指向其他结点的分支信息
- 结点的度:一个结点的子树个数称为此结点的度
- 叶结点:度为零的结点,即无后继的结点,也称为终端结点
- 分支结点:度不为零的结点,分支结点是非终端结点
- 孩子结点:一个结点的直接后继称为该结点的孩子结点(如图中B,C是A的孩子结点)
- 双亲结点:一个结点的直接前驱称为该结点的双亲结点(如图中A是B,C的双亲结点)
- 兄弟结点:同一双亲结点的孩子节点之间互相称为兄弟结点(如图中H,I,J互相称为兄弟结点)
- 祖先结点:一个结点的祖先结点是指从根结点到该结点路径上的每个结点(如图中K的祖先是A,B,E)
10,子孙结点:一个结点的直接后继和间接后继称为该结点的子孙结点(结点D的子孙结点是H,I,J,M)
- 树的度:树中所有结点的度的最大值
- 结点的层次:从根结点开始定义,根结点的层次为1,根的直接后继的层次为2,以此类推
- 树的高度:树中所有结点的层次的最大值
- 有序树:任意兄弟结点之间有顺序的树(无序树就是兄弟结点没有顺序的树)
举个有序树的例子:
然后就可以正式进入主题了,首先,什么是二叉树,二叉树满足哪些特点
- 二叉树的每个结点的度都不大于2
- 二叉树的每个孩子结点的次序都不能颠倒
所以二叉树里通常就会有下面几种图形
最后是二叉树比较重要的部分,二叉树的性质
性质1:二叉树的第i层至多有2i-1个结点
性质2:深度为k的二叉树至多有2k-1个结点(注意这里的k是大于等于1的)
性质3:对于一棵二叉树其终端结点数目为a,度数为2的结点数为b,那么a=b+1
满二叉树:深度为k且有2k-1个结点的二叉树
完全二叉树:深度为k(与完全二叉树深度相同),而且结点的数目至少为2k-1-2k-1-1
(这里2k-1代表的是最多结点的情况,然后减去2k-1-1,2k-1-1代表的是最后一层最多结点数目减1,也就是完全二叉树最少结点的情况是最后一层结点数目为1)
性质4:具有n个结点的完全二叉树的深度为[log2n]+1(表达式中[ ]符号代表取整)