树的基本概念
树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。
树( Tree' )是 n(n~O) 个结点的有限集。 n=O 时称为空树。 在任 意-棵非空树中: ( 1 )有且仅有-个特定的称为根 ( Root )的结 点: (2) 当 n>1 时,其余结点可分为 m (m>O) 个互不相变的 有限集 T1、 T2、……、 Tm,其中每一个集合本身又是一颗树,并且称为根的子树( SubTree )
- n>0 时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混在一 起,现实中的树有很多根须,那是真实的树,数据结向中的树是只能有一个根 结点。
- m>O 时,子树的个数没有限制,但它们一定是互不相交的。
结点的分类
结点拥有的子树数称为结点的度 (Degree)。度为 0 的结点称为叶结点(Leaf) 或终端结点;度不为 0 的结点 称为非终端结点或分支结点。 除根结点之外,分支结点也称为内部结点。树的度是树 内各结点的度的最大值。如下图, 因为这棵树结点的度的最大值是结点 D的度,为 3,所以树的度也为 3。
二叉树
每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
特点:
- 每个结点最多有两个子树
- 左子树和右子树有顺序,次序不能颠倒
- 即使某个结点只有一个结点,依然有左右子树之分
二叉树的五种形态:
- 空二叉树
- 只有一个根结点
- 根结点只有左子树
- 根节点只有右子树
- 根节点既有左子树又有右子树
特殊的二叉树
斜树:所有结点只有左子树的称为左斜树,只有右子树的称为右斜树
满二叉树:所有结点都有左右子树,且叶子结点都再同一层
满二叉树特点
- 叶子仅仅出现在最下一层
- 非叶子结点度一定为2
- 同样深度的树中,满二叉树结点最多,为
完全二叉树:对一棵具有 n 个结点的二叉树按层序编号,如果编号为 i (1<=i<=n) 的结点与同样深度的满二叉树中编号为 i 的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。且结点序号为连续的。
完全二叉树特点
- 叶子结点只能出现在最后两层
- 最下层的叶子结点只在左部连续的位置
- 倒数第二层的叶子结点只在右部连续的位置
- 如果结点的度为1,那么只有左子树
- 同样结点数的树中,完全二叉树深度最小
二叉树的性质
- 第i层上最多有 个结点
- 深度为k的二叉树至多有个结点
- 对任一一颗二叉树,若终端结点(叶子结点)数为,度为2的结点数为,则
- 具有n个结点的完全二叉树的深度为 [ ] + 1
二叉树的遍历
- 先序遍历:根结点->左子树->右子树
- 中序遍历:左子树->根节点->右子树
- 后序遍历:左子树->右子树->根节点
(非常简单的递归就可以实现)