AVL树toString()的实现

时间:2013-03-01 04:47:08

标签: 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 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}

任何帮助表示赞赏。谢谢

2 个答案:

答案 0 :(得分:2)

if (node.left != null) {
      inOrder(node.left, result);
      result.append(", ");
}

result.append(node.left); //should not be node.left

改为执行此操作

if (node.left != null) {
     inOrder(node.left, result);
     result.append(", ");
}

result.append(node); //this will print the node itself

同样TreeNode没有覆盖toString()方法,因此它会显示哈希码。

答案 1 :(得分:0)

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

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