在没有指针的Java中,二进制搜索树是如何工作的? 我试图比较BST在java和C++中的实现方式。在Java中,节点看起来像 class Node{ int data; Node left; Node right; } 和在C++中,将是: class Node{ int data; Node *left; Node *right; }

在没有指针的Java中,二进制搜索树是如何工作的? 我试图比较BST在java和C++中的实现方式。在Java中,节点看起来像 class Node{ int data; Node left; Node right; } 和在C++中,将是: class Node{ int data; Node *left; Node *right; },java,c++,pointers,binary-search-tree,Java,C++,Pointers,Binary Search Tree,我对java方法的工作原理感到困惑。我理解C++中的左边和右边是指向包含下一个节点的内存区域的指针。在Java中,我真的不明白所有东西最终是如何连接起来的。左侧和右侧是节点本身,而不是指向节点的指针,因此Java中的每个节点对象是否会占用3个节点的空间(一个用于自身,两个用于其子节点)?如果有人能解释一下所有节点的连接方式以及内存分配的差异,这将非常有帮助 也可以在C++中做同样的事情吗?你能用左节点和右节点代替指针吗?如果是这样的话,首先使用指针有什么好处?谢谢大家! 在Java代码中,类类型

我对java方法的工作原理感到困惑。我理解C++中的左边和右边是指向包含下一个节点的内存区域的指针。在Java中,我真的不明白所有东西最终是如何连接起来的。左侧和右侧是节点本身,而不是指向节点的指针,因此Java中的每个节点对象是否会占用3个节点的空间(一个用于自身,两个用于其子节点)?如果有人能解释一下所有节点的连接方式以及内存分配的差异,这将非常有帮助


也可以在C++中做同样的事情吗?你能用左节点和右节点代替指针吗?如果是这样的话,首先使用指针有什么好处?谢谢大家!

在Java代码中,类类型(
left
right
)成员声明隐式声明指针。Java中没有指针的特殊符号,因为大多数事情都是通过指针处理的。这些指针在Java语言规范中称为指针,但大多数Java程序员都知道它们是引用

C++ C++中的“p>”,它的本质是Java和C++之间的语法不同,但是请注意,C++指针和C++引用都不直接对应java指针。
还要注意:您可能会遇到Java没有指针的参数。出于某些我无法理解的原因(为什么他们不熟悉自己喜欢的语言的规范,为什么他们能够忽略,例如在屏幕上显示
NullPointerException
),一些Java程序员会强烈否认该语言有指针。这是一个谜,但我认为可以安全地忽略它。

Java正在使用引用。C++也有参考文献。有些语言没有引用,Java几乎所有东西都使用指针。每次将一个变量设置为一个对象时,您只是在存储一个指向该对象的指针。区别在于Java不允许您直接访问指针、操纵指针或使用指针进行计算;它会自动处理,有时会无缝处理。@BANTERBURY大主教不,他们不是,这根本没有意义,如果
left
right
是“
binary\u search\u tree
实例”,正如您所说,每次使用这个类时都会出现运行时错误(因为内存不会停止分配)。Java的引用不是实例。您可以将实例分配给引用,但它也可以是
null
null
不是任何实例)。这是一个糟糕的问题,表明您对语言的理解非常有限,您应该阅读Java的引用。这也是非常具体的,没有理由,这个问题不是关于BST,而是关于语言中变量的类型。其他寻求此问题A但不了解这些概念的用户将永远不会搜索BST,他们不会找到此问题。请阅读。@ KBelter,所以以上我向代码节点展示的两种方式是等价的,基本上只是java和C++之间的语法差异。不能用同样的方式操纵java引用,就像你可以操纵C或C++中的指针一样。当然,在C和C++中,我可以创建任何指针,但是我不能在java中获取对原始类型的引用。也许这是因为C指针不仅仅指向一个对象,所以如果我理解正确的话,上面的两段代码本质上是一样的。如果我在C++中没有指针就写了节点类,会发生什么?这是否完全不同于上面的2?@ EICS:你不能用C++来写它,而不是间接的,即指针或引用。如果您这样做,那么指定无限大类的代码就是无效的,并且不会编译。我认为您的评论“它们在JLS中被称为指针”具有误导性。引用JLS“参考值(通常只是参考)是指向这些对象的指针”。换句话说,它们被称为参考值,并被描述为指针。