【发布时间】:2010-08-27 20:45:19
【问题描述】:
我只是在查看 Eric Lippert 对 immutable binary tree 的简单实现,对此我有疑问。在展示了实现之后,Eric 指出
请注意,另一个不错的功能 不可变的数据结构是它 不可能意外(或 故意!)创建一棵树 包含一个循环。
Eric 实现的这一特性似乎不仅仅来自于不变性,还来自于树是由叶子组成的事实。这自然会阻止节点将其任何祖先作为子节点。似乎如果你在另一个方向构建树,你就会引入循环的可能性。
我的想法是否正确,或者在这种情况下,循环的不可能性仅来自不变性?考虑到来源,我想知道我是否遗漏了什么。
编辑:在考虑了更多之后,似乎从叶子开始构建可能是创建不可变树的唯一方法。我对吗?
【问题讨论】:
-
既然数据结构是不可变的,那么从另一个方向创建树是不是不可能,因此您的假设等于Eric的陈述?
-
是的,这就是我最初没有意识到的。
-
为什么每个人都认为树节点必须保存关于其子节点而不是其父节点的信息?文章中某处是否有这种效果的定义?在我看来,子节点指向其父节点的树结构是一种非常自然且常见的设计方式。并不是说指向自己的孩子有什么问题,但这不是唯一的方法。
-
我想你在理论上是正确的,但在实践中,这种形式的树并没有多大用处。通常你想从根节点开始遍历一棵二叉树,而不是各种叶子中的任何一个。
-
@LarsH 如果你有一个孩子指向父母的树结构(仅此而已),那么你如何找到所有孩子?至少,您必须保留所有叶子的另一个列表,才能遍历该结构。对于只有孩子指向父母的树,你不能做很多有用的事情。
标签: algorithm data-structures tree immutability