gpt4 book ai didi

java - 如何正确清除 Java 中的整个二叉树?

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:06 25 4
gpt4 key购买 nike

我有一个简单的二叉搜索树类,它的实例变量是 Node 类型,它是根。这并不复杂,只是与您之前看到的基本 BST 类相同,其中包含一个 Node 类,其中包含一个数据类型字段和两个对左右节点的引用。我想要一种清除树的方法。最初,我想,好的,这里是:

void clearTree() { root = null; }

但我的教授声称这并没有真正从内存中清除树,因为仍然有对树中父节点的节点的引用......即使我们没有对它们的引用。他这样说对吗?如果是,为什么这不会从内存中清除树?我认为一旦我们失去对它的引用,它就会被垃圾收集。

最佳答案

您的教授是正确的,使根等于 null 不会释放整棵树。在像 C 这样的语言中,如果您使 root=null 整个树仍在内存中。

但在 Java 中,正如@radai 所说,一旦您不再有对树节点的引用,垃圾收集器就会为您清理它。因此,在 Java 上下文中,make root=null 将起作用。

无论如何,如果您确实需要清理树的每个节点(例如 C/C++ 语言中需要的),您可以使用 pos-order 算法。当然,您需要使算法适应您的变量名和结构(或类,如果您想在 Java 中应用它)。

void clearTree(treenode *node) {
if (node != NULL) {
clearTree( node->leftChild );
clearTree( node->rightChild );
delete( node ); // Or in Java, node = null;
}
}

关于java - 如何正确清除 Java 中的整个二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22271147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com