我在Java中有一个基本的二进制搜索树。我正在尝试输出变量值,但我得到的只是地址而不是值本身。另外,有人可以解释我的inOrderTraversal方法中的代码与我的Node类中的display()
之间的关系,即使我自己没有调用它吗?我在main中调用的是addNode和inorderTraversal。
以下是我的代码:
class Node {
int value;
Node leftChild;
Node rightChild;
Node(int value, String name) {
this.value = value;
this.name = name;
}
public int displayNode() {
return value;
}
}
InOrderTraversal方法:
public void inOrderTraverseTree(Node focusNode) {
if (focusNode != null) {
// Traverse the left node
inOrderTraverseTree(focusNode.leftChild);
// Visit the currently focused on node
System.out.print(focusNode + " ");
// Traverse the right node
inOrderTraverseTree(focusNode.rightChild);
}
}
当前输出:Node@7852e922 Node@4e25154f Node@70dea4e Node@5c647e05 Node@33909752 Node@55f96302
期望的输出:5 10 15 20 25 30
我对C ++非常熟悉,只是自学Java并遇到了这些特殊问题。
答案 0 :(得分:0)
您正在打印一个对象,而不是它的内在价值(换句话说,您是隐式调用toString()
)。
为了打印该值,您应该从Node对象中获取值:
System.out.print(focusNode.displayNode() + " ");
另外,我建议您将displayNode()
方法重命名为getValue()
,因为这样可以更好地解释该方法的作用。
如果你希望你的方法在调用System.out.println(object);
时打印一些东西,你应该在Node类中覆盖toString()
方法:
@Override
public String toString() {
return this.value;
}
然后您的代码System.out.print(focusNode + " ");
将显示节点的值而不是对象的地址内存。