这次讲讲树。
首先上定义:
树的定义
要注意的是:
- 只有一个根结点(最顶上的那个结点)
- 子树不相交
如上图所示,这就是子树相交的情况。
结点分类
结点之间关系
双亲是因为结点雌雄同体,同时是父亲也是母亲。
层
树的层(level)的概念是从根开始定义的,根是第一层,根的孩子为第二层,如此类推。
此外,如果将树中结点的子树看成从左至右有次序,不能互换,那么称为有序树,否则称为无序树。
二叉树
其实上面的大概知道就可以了,因为真正的重点是二叉树。
用图来表示就是:
总之,记住每个结点下的子结点最多只能够有两个就对了。
二叉树特点
- 每个结点最多两颗子树
- 左子树和右子树有顺序
- 即使树中某结点只有一颗子树,也要区分左右
二叉树的五种形态
- 空二叉树
- 只有一个根结点
- 根节点只有左子树
- 根节点只有右子树
- 根节点既有左子树又有右子树
上图为皇帝的空二叉树
只有一个根结点
根结点只有左子树
根结点既有左子树又有右子树
特殊二叉树
斜树
所有结点只有左子树就是左斜树, 反之是右斜树,两者统称斜树。
左斜树
右斜树
满二叉树
即一颗二叉树中,所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。
完全二叉树
完全二叉树和满二叉树的不同在于,完全二叉树是满二叉树的子集,满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
此外,完全二叉树的结点与同样深度的满二叉树,在按照层序编号的时候编号是一一对应的。例如:
对应的满二叉树:
由此可得出完全二叉树的一些特点:
- 叶子结点只能出现在最下面的两层
- 最下层的叶子一定集中在左部连续位置
- 倒数二层如果有叶子结点一定都在右部连续位置
- 如果结点度数为1,那么该节点只有左孩子,即不存在只有右子树的情况
- 同样节点数的二叉树,完全二叉树的深度最小
所以判断一个二叉树是不是完全二叉树的方法就是:直接给每个结点按照层序进行编号,如果编号出现空当那么就说明不是完全二叉树。
二叉树性质
- 在二叉树的第 i i i层上最多有 2 i − 1 2^{i-1} 2i−1个结点( i ≥ 1 i \geq 1