树木简介


是一种离散结构,表示各个元素或节点之间的层次关系。父树不超过两个子树的树称为二叉树。

树及其属性

定义- 树是一个连接的非循环无向图。$G$ 中的每对顶点之间都有一条唯一的路径。具有 N 个顶点的树包含 $(N-1)$ 条边。0度的顶点称为树的根。度为 1 的顶点称为树的叶节点,内部节点的度至少为 2。

示例- 以下是树的示例 -

树

树的中心和双中心

树的中心是偏心率最小的顶点。树 $G$ 中顶点 $X$ 的偏心率是顶点 $X$ 与树的任何其他顶点之间的最大距离。最大偏心率是树的直径。如果一棵树只有一个中心,则称为中心树;如果一棵树只有多个中心,则称为双中心树。每棵树要么是中心树,要么是双中心树。

查找树的中心和双中心的算法

步骤 1 - 从给定的树中删除所有 1 度的顶点,并删除它们的关联边。

步骤 2 - 重复步骤 1,直到留下单个顶点或由边连接的两个顶点。如果留下单个顶点,则它是树的中心,如果留下由边连接的两个顶点,则它是树的双中心。

问题1

找出以下树的中心/双中心 -

树1

解决方案

首先,我们将删除所有 1 度的顶点,并删除它们的关联边,得到以下树 -

树1解决方案

同样,我们将删除所有 1 度的顶点,并删除它们的关联边并得到以下树 -

树 1 解决方案删除顶点

最后我们得到了一个顶点“c”,我们停止了算法。由于只有单个顶点,因此这棵树有一个中心“c”,并且该树是一棵中心树。

问题2

找出以下树的中心/双中心 -

树2

解决方案

首先,我们将删除所有 1 度的顶点,并删除它们的关联边,得到以下树 -

树 2 解决方案

同样,我们将删除所有 1 度的顶点,并删除它们的关联边并得到以下树 -

树 2 解决方案删除顶点

最后,我们剩下两个顶点“c”和“d”,因此我们停止算法。由于留下了由边连接的两个顶点,因此该树具有双中心“cd”并且该树是双中心的。

标记树

定义- 带标签的树是一棵树,其顶点被分配了从 1 到 n 的唯一编号。我们可以手工对 n 值较小的树进行计数,从而推测出一个通用公式。n 个顶点的标记树的数量为 $n^{n-2}$。如果两个标记树的图是同构的并且两棵树的对应点具有相同的标记,则它们是同构的。

例子

有两个顶点的标记树 具有三个顶点的三种可能的标记树

未标记的树木

定义- 未标记的树是其顶点未分配任何数字的树。n 个顶点的标记树的数量为 $\frac {(2n)!}{ (n+1)!n! }$(第 n加泰罗尼亚语数字)

例子

一棵没有标签的树 具有三个顶点的未标记树 两个可能的具有四个顶点的未标记树

有根的树

有根树 $G$ 是一个连通的无环图,具有称为树根的特殊节点,并且每条边都直接或间接源自根。有序有根树是每个内部顶点的子节点都是有序的有根树。如果有根树的每个内部顶点的子节点数不超过 m,则称为 m 叉树。如果有根树的每个内部顶点恰好有 m 个子节点,则称为满 m 叉树。如果$m = 2$,则有根树称为二叉树。

一棵有根的树

二叉搜索树

二叉搜索树是满足以下属性的二叉树 -

  • 顶点 $V 的左子树中的 $X$,Value(X) \le Value (V)$
  • 顶点 $V 的右子树中的 $Y$,Value(Y) \ge Value (V)$

因此,内部节点$V$的左子树的所有顶点的值都小于或等于$V$并且内部节点$V$的右子树的所有顶点的值大于或等于 $V$。从根节点到最深节点的链接数就是二叉搜索树的高度。

例子

二叉搜索树

在 BST 中搜索密钥的算法

BST_Search(x, k) 
if ( x = NIL or k = Value[x] ) 
   return x; 
if ( k < Value[x]) 
   return BST_Search (left[x], k); 
else  
   return BST_Search (right[x], k)  

二叉搜索树的复杂度

平均情况 最坏的情况下
空间复杂度 在) 在)
搜索复杂性 O(logn) 在)
插入复杂度 O(logn) 在)
删除复杂性 O(logn) 在)