如果没有指针,二进制搜索树如何在Java中工作?

Eri*_*c S -1 c++ java pointers binary-search-tree

我试图比较在Java和C++中实现BST的方式.在Java中,Node看起来像

class Node{
    int data;
    Node left;
    Node right; 
}
Run Code Online (Sandbox Code Playgroud)

在C++中它将是:

    class Node{
        int data;
        Node *left;
        Node *right;    
    }
Run Code Online (Sandbox Code Playgroud)

我很困惑java方法的工作原理.据我所知,在C++中,左右两边都是指向包含下一个Node的内存区域的指针.在Java中,我并没有真正了解所有内容最终是如何连接的.左边和右边是节点本身,而不是指向节点的指针,因此Java中的每个Node对象占用3个节点的空间(一个用于自身,另一个用于子节点)?如果有人能够解释所有节点的连接方式以及内存分配的差异,那么这将是非常有用的.

另外,在C++中可以做同样的事情吗?你能不能让Node离开Node而不是指针?如果是这样,首先使用指针有什么好处?谢谢!

Che*_*Alf 6

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

在您的示例中,它基本上只是Java和C++之间的语法不同,但请注意,C++指针和C++引用都不直接对应Java指针.

另请注意:您可能会遇到Java没有指针的参数.出于某种原因,我不能理解(为什么他们不熟悉他们喜欢的语言的规范,为什么他们能够忽略例如进入NullPointerException屏幕?)一些Java程序员会强烈否认该语言有指针.这是一个谜,但我认为可以安全地忽略它.