2017-03-22 147 views
-1

我需要做一個方法,將一個BST轉換爲一個字符串,每個孩子的前綴是一個縮進字符。二進制搜索樹到字符串

例如:

BinaryTreeSet set=new BinaryTreeSet(); 
set.add(6); 
set.add(4); 
set.add(3); 
set.add(5); 
set.add(9); 
set.add(10); 
set.add(8); 
set.add(0); 
System.out.println(set.treeString()); 

應該產生

=> 6 
    => 4 
    => 3 
     => 0 
    => 5 
    => 9 
    => 8 
    => 10 

我已經嘗試了幾個小時了,但我不取得任何進展。

我能得到最好的是

=> 6 
=> 0 
=> 3 
=> 5 
=> 4 
=> 8 
=> 10 
=> 9 

與下面的代碼:

public String treeString() { 

    StringBuilder builder = new StringBuilder("=> " + root); 
    builder.append(System.getProperty("line.separator")); 

    nodeString(root, builder); 

    return builder.toString(); 

    } 

    private void nodeString(BinaryTreeNode node, StringBuilder builder) { 
     if (node == null) { 
      return; 
     } 
     if (node.left != null) { 
      nodeString(node.left, builder); 
      builder.append("=> " + node.left); 
      builder.append(System.getProperty("line.separator")); 
     } 
     if (node.right != null) { 
      nodeString(node.right, builder); 
      builder.append("=> " + node.right); 
      builder.append(System.getProperty("line.separator")); 
     } 
    } 

不知何故,我無法弄清楚如何獲得訂單的權利... 另外我有沒有實際的想法如何正確製作縮進。

謝謝!

+0

你的榜樣(增加值時),如果您正在使用BST不符合所需的輸出。 'set.add(6); set.add(4); set.add(3);'應該生成6作爲根,4作爲左葉,3作爲右葉... – KarelG

+0

然後我們已經學會了不同的BST定義! 我們是左邊的孩子需要比其父母小,右邊需要更大。 無論如何,我得到它的工作! – schoeni

+0

@shoeni呃......你說得對。我記住了另一棵樹。使用'set.add(6); set.add(4); set.add(3);'在BST中確實應該提供6個根,4個作爲左邊,3個作爲4的左邊。我的不好。謝謝你, – KarelG

回答

0

嘗試放置builder.append之前遞歸nodeString調用。如果您還需要在示例輸出中使用縮進,則還需要跟蹤遞歸調用中的調用深度。

+0

,完美解決了訂單問題。一旦我完成縮進,我就會發布完成的代碼! – schoeni

0

本工程以解決BST的定義,我們發現了這個問題:

private void nodeString(BinaryTreeNode node, StringBuilder builder, int count) { 
     if (node == null) { 
      return; 
     } 
     // Left 
     if (node.left != null) { 
      for (int i = 0; i < count; i++) { // Adding indent 
       builder.append(" "); 
      } 
      builder.append("=> " + node.left); 
      builder.append(System.getProperty("line.separator")); 
      nodeString(node.left, builder, ++count); 
      --count; 
     } 
     // Right 
     if (node.right != null) { 
      for (int i = 0; i < count; i++) { // Adding indent 
       builder.append(" "); 
      } 
      builder.append("=> " + node.right); 
      builder.append(System.getProperty("line.separator")); 
      nodeString(node.right, builder, ++count); 
      --count; 
     } 
    }