微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在递归数据类型如 TREE中实现公共属性

如何解决在递归数据类型如 TREE中实现公共属性

在实现像 TREE 这样的递归数据结构时,我需要每个 TREE 一个公共属性,我想知道如何实现它:

有没有优雅的 eiffel 风格的解决方案?

解决方法

一棵树有一个独特的节点,可用于存储与整棵树相关的信息,而不是与特定节点相关的信息。为了检索此信息,应该有可能从树的任何其他节点到达根节点。一种可能的解决方案是拥有一个特征 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,树中的所有节点都只是引用这个单元格。好处是不需要对父节点的引用,并且可以立即访问数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。