数学表达式: 从恐惧到单挑 (12. 树)

12. 树

  • 树反映了一种层级关系: 一个学校有若干学院、一个学院有若干专业、一个专业有若干老师.

12.1 例子

在这里插入图片描述图 1. 树.
观察:

  • 树是一种特殊的图;
  • 有一个树根;
  • 除树根之外, 其它节点均有父节点;
  • 没有子节点的节点称为叶节点;
  • 从任意节点到树根都只有一条唯一的路径.

思考: 树的边有向还是无向?

12.2 定义

Let ϕ \phi ϕ be the empty node, a tree is a triple T = ( V , r , p ) T = (\mathbf{V}, r, p) T=(V,r,p) where

  • V ≠ ∅ \mathbf{V} \ne \emptyset V= is the set of nodes;
  • r ∈ V r \in \mathbf{V} rV is the root node;
  • p : V ∪ { ϕ } → V ∪ { ϕ } p: \mathbf{V} \cup \{\phi\} \to \mathbf{V} \cup \{\phi\} p:V{ϕ}V{ϕ} is the parent mapping satisfying
    • p ( r ) = ϕ p(r) = \phi p(r)=ϕ;
    • ∀ v ∈ V \forall v \in \mathbf{V} vV, ∃ ! n ≥ 0 \exist ! n \ge 0 !n0, st. p ( n ) ( v ) = r p^{(n)}(v) = r p(n)(v)=r.

最后一行源码: \forall v \in \mathbf{V}, \exist ! n \ge 0, st. p^{(n)}(v) = r

分析:

  • ϕ \phi ϕ 可以看作是常量, 对任意树都有效, 因此可以不出现在元组里面;
  • 不同元组可以有不同特性, 甚至这里的元组 r r r V \mathbf{V} V 的元素;
  • p ( 2 ) ( v ) = p ( p ( v ) ) p^{(2)}(v) = p(p(v)) p(2)(v)=p(p(v)). 可以理解为: v v v 的 2 阶父节点;
  • 最后一行读作: 对于任意的节点 v v v, 存在唯一的自然数 n n n, 使得 (满足) v v v 的第 n n n 阶父节点为 r r r;
  • 唯一性表示既可达又没有环;
  • p ( 0 ) ( v ) ≡ v p^{(0)}(v) \equiv v p(0)(v)v, 因此该条件考虑了 r r r r r r;
  • n n n 可以看作是节点所在的层, n = 0 n = 0 n=0 时只有根节点.

12.3 Java 代码

public class Tree {
	/**
	 * 节点数. 表示节点 v_0 至 v_{n-1}.
	 */
	int n;
	
	/**
	 * 根节点. 0 至 n-1.
	 */
	int root;
	
	/**
	 * 父节点.
	 */
	int[] parent;

	/**
	 * 构造一棵树, 第一个节点为根节点, 其余节点均为其直接子节点, 也均为叶节点.
	 */
	public Tree(int paraN) {
		n = paraN;
		parent = new int[n];
		parent[0] = -1; // -1 即 \phi
	}// Of the constructor
}//Of class Tree

分析:

  • 代码与定义的统一: 3-元组与 3 个成员变量. 写完程序又回去整理定义.
  • parent 函数可以用一维数组表示.
  • − 1 -1 1 表示 ϕ \phi ϕ.
  • 程序里面, 数据本身没有保障可达性、唯一性. 这和无向图的情况一致 (连接矩阵对称).

12.4 作业

  1. 自己画一棵树, 将其元组各部分写出来 (特别是函数 p p p).
  2. 针对该树, 将代码中的变量值写出来 (特别是 parent 数组).
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值