我想了解树中的子节点应该知道多少关于其父节点的信息的最佳实践。
我目前的问题相当简单明了。我有一个信息树,想要获取叶节点的“全名”(在这种情况下,它将是树中每个节点的名称到由点分隔的叶节点)。我可以通过向叶节点添加一个“getFullName”方法来做到这一点,该方法将树向上遍历到根节点并在每个父节点的名称前面加上最后的结果,但这需要叶子节点知道其父节点的类类型(叶节点)和非叶不是同一个类)。或者我可以在其他地方添加一个实用程序函数,它基本上做相同的事情,但知道不同的类类型。
我试图四处搜索,但这个问题有点过于宽泛,无法在 Google 上找到任何有用的点击。
提前致谢。
最佳答案
您在这里确实有很多选择,是的,您的问题解决了一方面在处理效率与存储需求增加和另一方面可能的冗余之间进行权衡的常见情况。
没有单一的最佳实践。空间/时间权衡取决于您的情况。如果您使用冗余存储,将子链接和父链接保存在节点内,您将需要确保正确封装数据结构并且您的方法保持所有内容一致。
由于您有一个从顶部遍历节点的用例,父链接工作正常,您可以通过递归或从后到前构建字符串来组成全名。因为用例适合您的情况,所以这不是一个坏主意。
另一种选择是将全名存储在节点中,但这会增加冗余,以防您移动节点。
简而言之,您不必担心违反最佳实践,但您应该权衡所有选择,以做出适合您的选择。
现在,如果你正在制作一个通用的树数据结构,比如 Java 的 TreeNode,你可能会创建一个接口(interface)并允许人们按照他们认为合适的方式实现事物,提供一个合适的通用实现(DefaultMutableTreeNode),它具有所有链接——父、 child 和 sibling 。
关于oop - 最佳实践 : A child node's knowledge about its parent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6766296/