树形结构

1 树形结构的作用

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

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

2 树形结构的特征

2.1 概念

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

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

2.2 标识和定位结点

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

2.3 有序树

“有序树”有以下特征:

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

2.4 链式名唯一的树

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

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

3 实现树形结构

在MyBox中,树结点的属性为:编号、标题、值、修改时间、亲结点的编号、标签。

3.1 结点的编号

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

结点的编号有以下缺点:

3.2 结点的标题

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

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

结点的标题有以下优点:

3.3 结点的值

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

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

MyBox功能 结点值的格式
笔记 网页片段。应是“body”的内容,不要包含标签“html”、“head”、和“body”。
树形信息 文本
收藏的网址 两个字段:网址、图标
图像的范围 保存图像范围的定义的XML
行过滤 三个字段:JavaScript表达式、是否反值、最多取值数
定义数据 保存数据属性和列定义的XML
SQL 文本:SQL语句
数学函数 四个字段:函数名、变量名列表、表达式、定义域
JavaScript 文本 :JavaScript代码
JShell 文本:Java代码
JEXL 三个字段:脚本、环境、参数

3.4 结点的标签

3.5 保留的字符串

4 管理树形结构

4.1 树图

选择一个结点,以此结点为根显示“树图“:

4.2 示例

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

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

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

4.3 导出

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

4.4 导入

可以批量导入树形信息:

注意:

4.5 查询和选择结点

选择要处理的结点,可以有以下方式:

4.6 增删改结点

选择一个或多个结点:

4.7 查看结点

选择一个结点:

4.8 菜单