在二进制搜索树中获取节点地址而不是值

时间:2014-12-31 08:37:03

标签: java binary-search-tree

我在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并遇到了这些特殊问题。

  1. 我只获取地址而不是节点的值
  2. inOrderTraversal和display()之间的链接是什么?我自己甚至没有调用display()方法。

1 个答案:

答案 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 + " ");将显示节点的值而不是对象的地址内存。