二叉树
定义
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。(来自百度百科)
性质
- 二叉树的第i层至多有2^(i-1)个结点
- 深度为h的二叉树至多有2^h-1个结点
- 任意一个二叉树中,叶子结点数=度为2的结点数+1
- 任意一个拥有n个结点的完全二叉树,高度为floor(log2(n))+1,其中floor(x)为向下取整函数
- 对于任意一个完全二叉树,第i号结点的父结点为i/2,左子结点为2i,右子结点为2i+1
完全二叉树
深度为h的二叉树,除了第h层外,其他层均包含该层所能拥有的最多结点数量,这个二叉树叫做完全二叉树,如上图所示。
满二叉树
在完全二叉树的基础上,第h层也有该层所能拥有的最多结点数,此时为满二叉树,如上图所示。
此时结点数n=2^(层数k)-1。
遍历
如图的二叉树
先序遍历
中左右
A->B->D->E->F->G->C
其中加粗的是A的左子树,红色是B的右子树,可以看出需要遍历完整个子树后才开始遍历下一部分。
中序遍历
左中右
D->B->F->E->G->A->C
后序遍历
左右中
D->F->G->E->B->C->A
其中由前序遍历和中序遍历可得到唯一二叉树,因为前序遍历可确定结点父子关系,中序遍历可确定左右树顺序。
例如给出前序遍历结果A->B->D->C->E->F->G和中序遍历结果D->B->A->C->F->E->G
可知根结点为A,根结点的左子树有结点D、B,右子树有结点C、F、E、G
又可得D、B中B为根结点,D为左子结点,C、F、E、G中C为根结点,右子树有F、E、G
又可得F、E、G中F为根结点,E为左子结点,G为右子结点,故树如下图所示: