一,什么是二叉树
二叉树的定义可以先通过下图有一个直观了解。
在计算机科学中,二叉树(英语:Binary tree
)是每个节点最多只有两个分支(即不存在分支度大于 2
的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。
这个图里面,有两个比较特殊的二叉树,分别是编号 2
和编号 3
这两个。
其中,编号 2
的二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫做满二叉树。
编号 3
的二叉树中,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大,这种二叉树叫做完全二叉树。
二,二叉树的存储
完全二叉树之所以这样定义是和二叉树的存储有关的。
二叉树的存储有两种方法,一种是基于指针或者引用的二叉链式存储法,一种是基于数组的顺序存储法。
链式存储法比较直观,每个节点有三个字段,其中一个存储数据,另外两个是指向左右子节点的指针。我们只要拎住根节点,就可以通过左右子节点的指针,把整棵树都串起来。如下图所示:
顺序存储法,假设把根节点存储在数组下标为 i = 1
的位置ÿ