二元搜索树如何在没有指针的情况下在Java中工作?

时间:2016-08-25 23:35:55

标签: java c++ pointers binary-search-tree

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

class Node{
    int data;
    Node left;
    Node right; 
}

在C ++中它将是:

    class Node{
        int data;
        Node *left;
        Node *right;    
    }

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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