2013-03-01 89 views
0

这是我的toString(),但它不能正常工作实现AVL树的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); 
     } 
    } 

这是个什么方法打印出: {空,AbstractTreeMap $ @树节点} 15a8767

任何帮助表示赞赏。谢谢

回答

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()方法覆盖,所以它显示了哈希码。

+0

不正确的实现。 A)由单个节点组成的树产生一个空字符串B)根不会被打印C)添加不必要的逗号。 – 2013-03-01 05:10:07

+0

@EyalSchneider toString()中的null是由于这一行,所以只是指出了错误。这是逻辑错误。 – 2013-03-01 05:15:20

+0

@EyalSchneider已编辑帖子。 – 2013-03-01 05:17:35

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

  2. 你的树节点类应覆盖的toString(显示某些节点​​ID),否则你会看到默认的toString(从Object),它看起来像 “AbstractTreeMap $ @树节点15a8767”