1 引入

对于一个二叉树,从根节点出发,使用由LR组成的字符串表示路径,则对于每一条路径可以唯一表示每一个节点。如图1所示:4号节点可以对应字符串 LR
,2号节点对应字符串R
。特别的,根节点对应的字符串为空字符串。
1.1 更加一般的情况
类比于二叉树,可以通过扩展LR
的字符集,来适应一个节点有超过两个孩子节点的情形,例如图2中的4号节点,可以用字符串C
来表示。

1.2 符号说明
- 设
是树的节点集合,则可以通过上述过程,将每一个节点映射成一个字符串,设字符串的集合为
;
- 定义函数
,使得
以及
;
- 定义
是一个集合,该集合的所有节点均是
的祖先节点;
- 定义
为
节点和
节点之间的距离;
- 定义
是一个节点,表示
号节点于
号节点的最近公共祖先。在图1中,
而
;
- 假设
是一个长度为
的字符串,则
,用于表示字符串
所有的前缀的集合;
- 假设
是一个字符串结合,
,
是
中最长的字符串之一,且在最长的字符串中字典序最大;
- 假设
是一个字符串,
表示字符串
的长度。
1.3 性质
- 对于任意的字符串
和
,分别对应树中的节点
和
,有:
- 如果
,那么节点
。
-
。
- 如果
2 特殊场景
2.1 满二叉树编码表示

对于一个满二叉树,如果将节点按照层序遍历的顺序从1开始编号,就可以根据节点的二进制位表示,来获取到对应的字符串。如图3所示。值得注意的是,该编码与第一节相比,每一个字符串多了一个字符1
。
网友评论