摘自计蒜客:http://www.jisuanke.com/course/35/1389
如上图所示,二叉树的每个结点最多只有两个孩子结点,也就是说每个结点最多有两个子树。
二叉树有 5 种基本形态:
空二叉树,树为空,没有结点;
只有根结点的二叉树;
只有左子树的二叉树;
只有右子树的二叉树;
左右子树都有的二叉树。
接下来我们来看看二叉树的性质:
二叉树的第 i 层最多有 2i - 1 个结点。由定义可知,二叉树的每个结点最多有两个孩子结点,那么第 i 层最多的结点数等于第 i - 1 层最多结点数的 2 倍。而第 1 层最多只有 1 个结点,所以我们可以知道第 i 层最多有 2i - 1 个结点。
深度为 k 的二叉树最多有 2k - 1 个结点。由上一个性质,我们可以知道二叉树每层最多的结点个数,从第 1 层到第 k 层把最多结点数累加起来,我们就可以得到深度为 k 的二叉树最多有 2k - 1 个结点。
任意一棵二叉树上,其叶子结点个数 n0 比度为 2 的结点数 n2 多 1。度为 2 的结点指的是即有左孩子又有右孩子的结点。我们记树上结点总个数为 n,度为 1 的结点个数为 n1,则有 n = n0 + n1 + n2。另外我们可以发现一棵二叉树一共有 n - 1 条边,度为 2 的结点可以延伸出 2 条边,度为 1 的结点可以延伸出 1 条边,叶子结点没有边延伸出来,所以又有 n - 1 = n1 + 2 * n2。结合以上两个式子,我们可以得到 n0 = n2 + 1。
下面我们来了解下两个特殊的二叉树吧。
第一个是满二叉树,如果一棵树深度为 k 而且有 2k - 1 个结点,那么我们称该二叉树为满二叉树,也就是说在此深度上,不能再添加结点了;
第二个是完全二叉树,如果一棵树深度为 k,从第 1 层到第 k - 1 层该树是满二叉树,第 k 层的结点都集中在左边,那么我们称该二叉树为完全二叉树。完全二叉树因其结构的特殊性具有很高的效率,它经常被用在算法的优化里。