1、树(Tree)
树是一种非线性数据结构,它由节点(Node)和边(Edge)组成。在树中,每个节点可以有零个或多个子节点,但没有父节点的节点称为根节点(Root Node)。除了根节点外,每个节点都有且仅有一个父节点。树中不存在环,即任何两个节点之间只有一条唯一的路径。
基本术语:
节点:树的基本单位,包含数据元素以及指向其子节点的指针(或链接)。 根节点:树中唯一没有父节点的节点。 子节点:节点下的节点称为其子节点。 父节点:节点上面的节点称为其父节点。 叶子节点(或终端节点):没有子节点的节点。 度:一个节点的子节点数。 树的度:树中所有节点的度的最大值。 层次:从根节点开始算起,根节点为第1层,根节点的子节点为第2层,依此类推。 深度(或高度):树中节点的最大层次。
树的种类:
二叉树:每个节点最多有两个子节点的树。 多叉树:每个节点可以有任意多个子节点的树。 完全二叉树:除最后一层外,每一层上的节点数均达到最大值,且最后一层的所有节点都尽量靠左。 满二叉树:除了叶子节点外,每个节点都有两个子节点的二叉树。 平衡二叉树(如AVL树、红黑树):任意节点的两个子树的高度最大差别为1的二叉树。
2、森林(Forest)
森林是零棵或多棵不相交的树的集合。换句话说,如果将一棵树的根节点删除,那么它将变成一棵森林,其中包含了原来树的所有子树。反过来,如果将森林中的每棵树的根节点通过一个公共的父节点连接起来,那么就会形成一棵树。
性质:
森林中的每棵树都是独立的,即它们之间没有直接的边相连。 森林可以看作是树的“退化”或“分解”形式。
树与森林的关系
转换:树可以转换为森林(删除根节点),森林也可以转换为树(添加一个公共的根节点将所有树连接起来)。
应用:在某些情况下,将问题建模为森林可能比建模为单棵树更自然或更有效。例如,在文件系统的表示中,如果我们将每个目录看作一棵树,那么整个文件系统就可以看作是一个森林。