2013-03-01 75 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」