【发布时间】:2020-03-20 02:33:03
【问题描述】:
我正在编写一个二叉搜索树实现,并且我想要一个函数来查找节点并返回到达该路径的所有节点的双向链表。我知道双向链表可以转换为二叉搜索树,所以能够使用同一个类会非常好(而且很酷)。
但是,如果我沿途制作所有节点的浅表副本并开始更改它们的指针以构建我想要返回的二叉搜索树,我显然会破坏原始树。我不能只对所有节点进行深层复制,因为我需要对原始节点的引用,我将使用它来更改原始树(可能是删除、平衡……)。
例如,我可能有一个调用 find 的 add 函数,它返回路径中的最后一个节点,指向新节点的去向,我可以简单地将它作为其中的一个子节点。如果我正在编写一个自平衡二叉树类(红/黑树、AVL 树、Splay 树),我可以从这个类中继承它,那么至少可以访问节点的父节点和祖父节点会很好我刚刚添加了(我可以使用额外的指针进行跟踪,但是 find 方法没有那么通用)。
当然,一种解决方案是编写另一个类。另一种解决方案是满足于单链表,并使用另一个指针来引用相应的原始节点。但是,在这一点上,不仅仅是有一个可行的解决方案。我使用的语言是 Java,但我肯定有兴趣知道其他语言是否也有这方面的功能。对我来说这似乎不太可能,但我可能完全错过了一些东西。
有谁知道是否有办法做到这一点,或者对我可以做什么有任何建议?
【问题讨论】:
-
听起来是个坏主意
标签: java binary-search-tree doubly-linked-list deep-copy shallow-copy