繁体   English   中英

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

[英]Getting Node Address instead of Value in 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()方法。

您正在打印一个对象,而不是其内部值(换句话说,您正在隐式调用toString() )。

为了打印值,您应该从Node对象获取值:

System.out.print(focusNode.displayNode() + " ");

另外,我建议您将displayNode()方法重命名为getValue() ,因为它可以更好地说明该方法的作用。

并且如果您希望您的方法在调用System.out.println(object);时打印某些内容System.out.println(object); ,则应在Node类中重写toString()方法:

@Override
public String toString() {
  return this.value;
}

然后您的代码System.out.print(focusNode + " "); 将显示节点的值,而不是对象的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM