Java AVL树toString()的实现

Java AVL树toString()的实现,java,stringbuilder,avl-tree,Java,Stringbuilder,Avl Tree,这是我的toString(),但它不能正常工作 public String toString() { StringBuilder str = new StringBuilder("{"); traverse(root, str); str.append("}"); return str.toString(); } private void traverse(TreeNode node, StringBuilder

这是我的toString(),但它不能正常工作

public String toString() {
        StringBuilder str = new StringBuilder("{");
        traverse(root, str);
        str.append("}");

        return str.toString();
    }

    private void traverse(TreeNode node, StringBuilder str){
        if (node == null){
            return;
        }

        if (node.left != null) {
            traverse(node.left, str);
            str.append(", ");
        }

        str.append(node.left);

        if (node.right != null) {
            str.append(", ");
            traverse(node.right, str);
        }
    }
这是方法打印出来的内容: {null,AbstractTreeMap$TreeNode@15a8767}

感谢您的帮助。多谢各位

  • 递归方法应该调用result.append(node),而不是result.append(node.left)

  • 您的TreeNode类应该覆盖toString(显示一些节点id),否则您将看到默认的toString(来自对象),它看起来像“AbstractTreeMap”$TreeNode@15a8767"

  • 改为这样做

    if (node.left != null) {
         inOrder(node.left, result);
         result.append(", ");
    }
    
    result.append(node); //this will print the node itself
    

    另外,
    TreeNode
    没有覆盖
    toString()
    方法,因此它显示哈希代码。

    不是正确的实现。A) 由单个节点组成的树会生成一个空字符串B)从不打印根C)添加不必要的逗号。@EyalSchneider toString()中的null是由于这一行造成的,所以刚刚指出了错误。正确的逻辑是错误的。
    if (node.left != null) {
         inOrder(node.left, result);
         result.append(", ");
    }
    
    result.append(node); //this will print the node itself