问题描述
在实现像 TREE 这样的递归数据结构时,我需要每个 TREE 一个公共属性,我想知道如何实现它:
解决方法
一棵树有一个独特的根节点,可用于存储与整棵树相关的信息,而不是与特定节点相关的信息。为了检索此信息,应该有可能从树的任何其他节点到达根节点。一种可能的解决方案是拥有一个特征 parent
,它将返回指定节点的父节点(或 Current
为根)。那么,获取根节点的特征就可以是这样的
root: TREE
-- The root of the tree.
local
p: TREE
do
from
Result := Current
p := parent
until
Result = p -- `Result = Result.parent` when `Result` is root.
loop
Result := p
p := p. parent
end
ensure
Result.parent = Result -- `Result` has no other parent.
end
然后可以从带有 n
的任意树节点 n.root.my_attribute
中检索特定于树的属性值。
编辑:
另一种可能性是拥有一个带有所需数据的专用 CELL
,树中的所有节点都只是引用这个单元格。好处是不需要对父节点的引用,并且可以立即访问数据。