我正在尝试比较在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而不是指针?如果是这样,首先使用指针有什么好处?谢谢!
答案 0 :(得分:6)
在Java代码中,类类型(left
和right
)成员声明隐式声明指针。 Java中的指针没有特殊符号,因为大多数内容都是通过指针处理的。这些在Java语言规范中称为指针,但大多数Java程序员都知道它们是引用。
在您的示例中,它基本上只是Java和C ++之间的语法不同,但请注意,C ++指针和C ++引用都不直接与Java指针对应。
另请注意:您可能会遇到Java没有指针的参数。出于某种原因,我不能理解(为什么他们不熟悉他们喜欢的语言的规范,为什么他们能够忽略例如在屏幕上获取NullPointerException
?)一些Java程序员会强烈否认该语言有指针。这是一个谜,但我认为可以安全地忽略它。