lec7 Trees(1)
lec7 Trees(1)
又回到了树,依然是只记录比较重要的部分,其他就不记录了。😎
根树的定义
定义 1:根树 根树是一个树结构,其中一个顶点被指定为根,并且每条边都是从根节点指向其子节点的方向。
根树不仅可以通过简单的选择一个顶点作为根节点来定义,还可以通过递归的方式定义。递归地定义根树时,首先将树中的一个顶点选择为根,然后从根出发的每一条边都指向它的子节点。
根树的递归定义
- 递归定义: 可以通过选择任意一个顶点作为根,将一个无根树转化为根树。根树的结构由根节点以及根节点的子树组成,其中每个子树本身也可以看作是一个根树。
- 根的选择: 对于同一棵无根树,可以选择不同的顶点作为根节点,从而产生不同的根树。每次选择不同的根节点,都会得到一棵具有不同结构的根树。
根树的定义和分类
n-叉树(n-ary tree) 根树称为 n-叉树,如果每个顶点的子节点数量不超过 nn。也就是说,树中的每个节点最多可以有 n个子节点。
完全n-叉树(full n-ary tree) 根树称为 完全n-叉树,如果每个内部节点(非叶子节点)恰好有 n 个子节点。
二叉树(binary tree) 当 n=2时,根树称为 二叉树。二叉树是每个节点最多有两个子节点的树形结构。
应用示例
二叉树:二叉树常用于描述 是非决策过程。例如,二叉搜索算法中的比较操作就是通过二叉树来描述的,其中每个节点代表一个决策点,左右子树分别代表不同的决策结果。
例如: 在二叉搜索算法中,每个比较操作决定了一个元素是否应该在左子树或右子树中,从而进一步细化搜索范围。
有序树和有序二叉树
有序树(Ordered Tree) 有序树是一种根树,其中每个内部节点的子节点是有顺序的。也就是说,每个节点的子节点的顺序是固定的,这与普通树不同,后者的子节点顺序可以是任意的。
有序二叉树(Ordered Binary Tree) 在有序二叉树中,我们可以明确区分每个节点的左子节点和右子节点。具体定义如下:
- 左子节点(left child):一个节点的第一个子节点。
- 右子节点(right child):一个节点的第二个子节点。
此外,可以进一步定义:
- 左子树(left subtree):由左子节点及其所有后代组成的子树。
- 右子树(right subtree):由右子节点及其所有后代组成的子树。
对于 n>2的 n-叉树
对于具有 n>2 的 n-叉树,可以使用类似于“最左子节点(leftmost)”和“最右子节点(rightmost)”等术语来描述各个节点的子节点的顺序。
一些定理
定理2:一棵具有 \(n\) 个顶点的树有 \(n-1\) 条边。
证明:
我们将使用数学归纳法来证明这个定理。首先需要回顾一下树的定义:树是一种无环连通图,也就是说,树是一个没有环路的图,并且任意两个顶点之间都有一条路径。
对于所有树,我们可以选择一个根,假设我们考虑的是有根树。
1. 基础情况:
当 \(n = 1\) 时,表示树中只有一个顶点,显然没有边。因此,当 \(n = 1\) 时,树的边数为 0,符合定理所述的 \(n - 1 = 0\),所以当 \(n = 1\) 时定理成立。
2. 归纳假设:
假设对于任意正整数 \(k\),所有具有 \(k\) 个顶点的树都有 \(k - 1\) 条边。我们将基于这个假设证明对于 \(k + 1\) 个顶点的树也成立。
3. 归纳步骤:
设 \(T\) 是一棵有 \(k + 1\) 个顶点的树。根据树的定义,树是一个连通无环图,因此,如果我们从树中去掉一个顶点及其相连的边,剩下的部分仍然是一个连通无环图,即是一棵树。
- 去掉一个顶点 \(v\) 和它的连接边后,剩下的部分是一个有 \(k\) 个顶点的子树。
- 根据归纳假设,这个有 \(k\) 个顶点的子树有 \(k - 1\) 条边。
- 由于我们去掉的边是连接顶点 \(v\) 与树中的其他部分的边,所以去掉这个顶点后,树的边数减少了 1。
因此,原树 \(T\) 的边数应该是 \(k - 1 + 1 = k\) 条边。
由此证明了一棵具有 \(k + 1\) 个顶点的树有 \(k\) 条边。
定理 3:一个满 \(m\)-叉树包含 \(n = m \times i + 1\) 个顶点,其中 \(i\) 为中间节点的数量。
证明:
除了根节点,每个中间节点都有 \(m\)
个子节点。因此,树中除根节点外的顶点总数为 \(m
\times i\)。因此,树包含的总顶点数为: $ n = m i + 1 $
这证明了定理 3。
定理 4:一个满 \(m\)-叉树具有以下性质:
(i) 当树有 \(n\) 个顶点时,中间节点数 \(i = \frac{n-1}{m}\),叶子节点数 \(l = \frac{(m-1) \times n + 1}{m}\)。
证明:
- 根据定理 3,\(n = m \times i + 1\),从中解得中间节点数 \(i = \frac{n-1}{m}\)。
- 将 \(i = \frac{n-1}{m}\) 代入公式 \(n = l + i\) 中,得到: $ l = n - i = n - = $ 这证明了第 \(i\) 小结。
(ii) 当树有 \(i\) 个中间节点时,顶点数 \(n = m \times i + 1\),叶子节点数 \(l = (m-1) \times i + 1\)。
证明:
- 根据 \(n = l + i\) 和 \(n = m \times i + 1\),我们有: $ l + i = m i + 1 $
- 解得 \(l = (m-1) \times i + 1\)。 这证明了第 \(ii\) 小结。
(iii) 当树有 \(l\) 个叶子节点时,顶点数 \(n = \frac{m \times l - 1}{m-1}\),中间节点数 \(i = \frac{l-1}{m-1}\)。
证明:
- 根据 \(n = l + i\),有 \(i = n - l\)。
- 又因为根据第 \(ii\) 小结,\(l = (m-1) \times i + 1\),代入得到: $ l = (m-1) (n - l) + 1 $
- 解得 \(n = \frac{m \times l - 1}{m - 1}\)。
- 同时,代入 \(l = \frac{(m-1) \times n + 1}{m}\),得到 \(i = \frac{l - 1}{m - 1}\)。 这证明了第 \(iii\) 小结。
链信问题分析
假设有一个人开始了一个链信。每个收到链信的人被要求将链信发送给另外四个人。有些人会按要求发送,而有些人不会发送任何链信。
在以下条件下,我们需要回答两个问题:
- 多少人看到过链信,包含第一个人,如果链信结束时,共有100人看过链信但没有发送出去?
- 有多少人发送了链信?
解答:
该链信过程可以使用一个4叉树来表示。树的每个内部节点表示一个发送了链信的人,而叶节点表示那些没有继续发送链信的人。
根据题意,链信结束时,有100个人看过链信,但没有继续发送。因此,树的叶子节点的数量为 $ l = 100 $。
根据定理4的第 (iii) 小结,满 \(m\)-叉树的叶子节点数与中间节点数的关系是: $ n = $ 这里 \(m = 4\)(每个节点最多发送给4个人),代入叶子节点数 \(l = 100\),可以得到总人数 \(n\): $ n = = = = 133 $ 因此,共有133人看过链信。
接下来,我们求发送链信的人数。根据定理4,第 (ii) 小结,树的中间节点数 \(i\) 与总人数 \(n\) 和叶子节点数 \(l\) 的关系为: $ i = = = = 33 $ 因此,有33人发送了链信。
结论:
- 总共有133人看过链信,其中100人没有继续发送。
- 其中33人发送了链信。
平衡树的定义:
在根树中,有时希望树是“平衡的”,也就是说,每个节点的子树深度大致相同。为了进一步理解这个概念,我们有以下定义:
- 顶点的层级:一个顶点 \(v\) 的层级是从根节点到该顶点的唯一路径的长度。
- 根节点的层级定义为零。
- 树的高度:树的高度是树中所有顶点层级的最大值。
求解树中每个顶点的层级和树的高度
给定树的层级情况:
- 根节点 \(a\) 在层级 0。
- 顶点 \(b\)、\(j\)、\(k\) 在层级 1。
- 顶点 \(c\)、\(e\)、\(f\)、\(l\) 在层级 2。
- 顶点 \(d\)、\(g\)、\(i\)、\(m\)、\(n\) 在层级 3。
- 顶点 \(h\) 在层级 4。
定理 5:一个高度为 \(h\) 的 \(m\)-叉树最多有 \(m^h\) 个叶子节点。
证明: 我们通过数学归纳法来证明此定理。
基础情况:考虑高度为 1 的 \(m\)-叉树。
这些树由一个根节点组成,根节点最多有 \(m\) 个子节点,每个子节点都是叶子节点。因此,高度为 1 的 \(m\)-叉树最多有 \(m^1 = m\) 个叶子节点。归纳假设:假设对于所有高度小于 \(h\) 的 \(m\)-叉树,结论成立。
归纳步骤:假设 \(T\) 是一个高度为 \(h\) 的 \(m\)-叉树。
树 \(T\) 的叶子节点是通过删除从根节点到 1 层的边后,得到的每个子树的叶子节点。这些子树的高度小于或等于 \(h-1\),并且最多有 \(m\) 个子树,每个子树最多有 \(m^{h-1}\) 个叶子节点。
因此,树 \(T\) 总共有的叶子节点数最多为 \(m \times m^{h-1} = m^h\) 个。
推论 1:如果一个高度为 \(h\) 的 \(m\)-叉树有 \(l\) 个叶子节点,则有:
$ h _m l $ 如果该树是满的且平衡的,则有: $ h = _m l $
一些问题
问题1:
已知无向树 $ T $ 中有 1 个度为 3 的结点,2 个度为 2 的结点,其余结点是树叶(度为 1 的结点),试求树叶数,并给出树的结构。
解答过程:
设定变量: 设树叶的数量为 $ x \(,则树的总结点数为:\) n = 1 + 2 + x = 3 + x $ 其中,1 个度为 3 的结点,2 个度为 2 的结点,剩下的结点是树叶,度数为 1。
使用树的性质: 根据树的性质,树有 $ n - 1 $ 条边(因为树是无环连通图),所以边的总数为: $ m = n - 1 = (3 + x) - 1 = 2 + x $
利用握手定理: 握手定理告诉我们,树中所有结点的度数和为边数的两倍,即: $ 2m = 2(n - 1) $ 代入已知的边数 $ m = 2 + x \(:\) 2(2 + x) = 1 + 2 + x $ 展开并化简: $ 4 + 2x = 3 + 4 + x $ $ 4 + 2x = 7 + x $ 移项得到: $ 2x - x = 7 - 4 $ $ x = 3 $ 所以,树叶的数量为 $ x = 3 $。
总结: 该无向树有 3 个树叶(度为 1 的结点),2 个度为 2 的结点,1 个度为 3 的结点。
问题2:
已知无向树 $ T $ 有 5 片树叶,度数为 2 和 3 的顶点各 1 个,其余顶点的度数均为 4,试求树 $ T $ 所包含的结点数 $ n $,并给出满足要求的所有非同构的无向树。
解答过程:
- 设定变量:
- 设树中有 5 片树叶,度数为 2 和 3 的顶点各 1 个,其余顶点的度数均为 4。
- 总结点数 $ n $ 包括:5 片树叶(度数为 1 的结点),1 个度为 2 的结点,1 个度为 3 的结点,和若干个度为 4 的结点。
- 树的性质:
- 由于树有 $ n - 1 $ 条边(树是无环连通图),所以边数为 $ m = n - 1 $。
- 利用握手定理:
- 握手定理告诉我们,树中所有结点的度数和等于边数的两倍,即: $ 2m = 2(n - 1) $
- 各个结点的度数和为: $ = 5 + 1 + 1 + 4 (n - 7) $
- 这里 5 片树叶度为 1,1 个度为 2 的结点,1 个度为 3 的结点,其余 $ n - 7 $ 个结点度数为 4。
- 代入计算:
- 根据握手定理得: $ 2(n - 1) = 5 + 1 + 1 + 4 (n - 7) $ 展开并化简: $ 2n - 2 = 5 + 2 + 3 + 4(n - 7) $ $ 2n - 2 = 10 + 4n - 28 $ $ 2n - 2 = 4n - 18 $ 移项得到: $ 2n - 4n = -18 + 2 $ $ -2n = -16 $ $ n = 8 $ 所以,树 $ T $ 包含的结点数 $ n = 8 $。
- 总结:
- 总结下树的顶点度数:度数为 1 的结点 5 个,度数为 2 的结点 1 个,度数为 3 的结点 1 个,度数为 4 的结点 1 个。
- 该树的顶点度数分布为:1、1、1、1、1、2、3、4。
树的结构:
- 根据这些度数信息,树的结构可以有以下形式:1 个度为 4 的结点,1 个度为 3 的结点,1 个度为 2 的结点,5 个度为 1 的树叶结点。所有可能的结构都是非同构的。