树形结构

1 树形结构的作用

树形结构是基本的数据结构,用来表示数据之间一种非线性的逻辑关系。

树形结构可以精确描述层次关系和从属关系。

2 树形结构的特征

2.1 概念

信息可以被组织为树形结构:

  1. “结点”存储一段信息。
  2. “子结点”:下一层、并属于此结点。亦称“分支结点”。
    一个结点可以有多个“子结点”。
  3. “亲结点”:上一层、并拥有此结点。
    一个结点只能有一个“亲结点”。
  4. “后代结点”:从子结点向下递归延伸的所有结点。
  5. “祖先结点”:从亲结点向上递归延伸的所有结点。
  6. “同胞结点”:具有相同亲结点的结点。
  7. “根结点”:第一层,是其它结点的祖先。
  8. “叶结点”:没有子结点。
  9. “层次号”:从根结点到此结点所经路径上的结点序号的组合。
  10. “结点名”:用于描述结点的字符串。
  11. “链式名”:从根结点到此结点所经路径上的结点名的组合。
  12. “稳定的结点名”:在观察或者处理的时间段内,结点名不会发生变化。
  13. “静态树”:在观察或者处理的时间段内,树结构不会发生变化,即不会发生增加、删除、移动结点的情况。
  14. “动态树”:在观察或者处理的时间段内,树结构会发生变化,即会发生增加、删除、移动结点的情况。

2.2 标识和定位结点

要在树上准确定位到指定的结点:

2.3 有序树

“有序树”有以下特征:

因此,层次号只适用于在静态的有序树上定位结点。

2.4 链式名唯一的树

“链式名唯一的树”有以下特征:

因此,在链式名唯一的静态或动态树结构上可以用链式名来定位结点。

3 实现树形结构

在MyBox中,树结点的基本属性为:编号、标题、排序号、修改时间、亲结点的编号、标签。
每种类型的树还有自己特定的数据属性。

3.1 结点的编号

结点的编号是自增字段,用于唯一标识和定位结点。它是绝对稳定的属性:

结点的编号有以下缺点:

3.2 结点的标题

结点的标题是用于描述结点的字符串:

由于子结点的标题可以相同,若把结点的标题当作结点名,则其组构的链式名不能保证唯一、不能用它准确定位结点。

结点的标题有以下优点:

3.3 结点的值

结点的值按大文本保存,长度为2G。

在MyBox中,以下功能所处理的对象都是以树形结构存储和管理:

MyBox功能 数据的属性
网页树 网页代码
文本树 文本
收藏的网址 两个字段:网址、图标
图像的范围 保存图像范围的多个字段
行表达式 JavaScript代码
数据列 列定义的多个字段
SQL SQL语句
数学函数 四个字段:函数名、变量名列表、表达式、定义域
JavaScript JavaScript代码
JShell Java代码
JEXL 三个字段:脚本、环境、参数

3.4 结点的排序号

结点的“排序号”用于排序同胞结点(相同亲节点的结点)。可以是负值或带小数。

工具提供整理排序号的功能,即把同胞结点的排序号重新赋值为:递增步长为1。

3.5 结点的标签

4 管理树形结构

4.1 定义标签

用户可以为每种树形结构定义不同的标签集。

4.2 示例

MyBox为每一个树形结构的功能都提供了示例。

点击菜单项“示例”以导入功能的示例数据。

在MyBox的文档列表中可以查看各个示例的树图。

4.3 导出

选择一个结点,以此结点为根导出树形结构:

4.4 导入

可以批量导入树形信息:

树形XML可以用来在文件中定位树结点:

在导入结点时,不能依靠编号来定位结点,因为编号是与应用环境紧密耦合的属性:

4.5 增删改结点

选择一个或多个结点:

4.6 查看结点

选择一个结点:

4.7 菜单