2017-10-07 95 views
1
public void Print() { 
     Print(root, 4); 
    } 

    private void Print(Node node, int padding) { 
     if (node != null) { 
      if (node.rChild != null) { 
       Print(node.rChild, padding + 4); 
      } 
      if (padding > 0) { 
       Console.Write(" ".PadLeft(padding)); 
      } 
      if (node.rChild != null) { 
       Console.Write("/\n"); 
       Console.Write(" ".PadLeft(padding)); 
      } 
      Console.Write(node.value.ToString() + "\n "); 
      if (node.lChild != null) { 
       Console.Write(" ".PadLeft(padding) + "\\\n"); 
       Print(node.lChild, padding + 4); 
      } 
     } 
    } 

此代碼在控制檯中返回一個很好的格式日誌。像下面一樣使用嵌套方法的無效字符串方法轉換

 6 
    /
    5 
    \ 
     4 
/
3 
\ 
    2 
    \ 
     2 

現在,當我將void轉換爲字符串格式時,它變得凌亂,它似乎不工作。因爲我有嵌套的方法。

所以我現在失去了從虛空轉換爲字符串

+1

哪裏是代碼,您試過嗎?如果您不顯示我們,我們無法告訴您如何解決此問題。 – JLRishe

+0

它只是增加了一堆變量並在對方內返回並將void更改爲String。我寫的代碼不在話題之列,理論上不應用 – Bamuel

回答

1

一個簡潔的方式來處理,這將是:

  1. 替換每個if語句與條件語句,要麼產生if陳述或空字符串裏面的東西。
  2. 把所有的拼在一起使用+
  3. 返回結果

這將使你:

private string Print(Node node, int padding) 
{ 
    if (node != null) 
    { 
     return 
      (node.rChild != null 
       ? Print(node.rChild, padding + 4) 
       : "") + 
      (padding > 0 
       ? " ".PadLeft(padding) 
       : "") + 
      (node.rChild != null 
       ? "/\n" + " ".PadLeft(padding) 
       : "") + 
      node.value.ToString() + "\n " + 
      (node.lChild != null 
       ? " ".PadLeft(padding) + "\\\n" + Print(node.lChild, padding + 4) 
       : ""); 
    } 

    return ""; 
} 
2

所以不是打印出來的價值觀,你想讓它回到樹爲字符串。

好,要做到這一點,你只需要改變每Console.Write方法調用追加你被打印到大串的串,每Print方法調用的Print返回值追加到一個大的字符串。並在最後返回這個大字符串

基本上,想象「大字符串」是控制檯。

您可以使用StringBuilder類作爲我正在談論的這個大字符串。讓我們創建一個在印刷方法的開始:

StringBuilder sb = new StringBuilder(); 

現在我們需要尋找這兩種模式,並改變它們。

我們改變:

Console.Write(XXX); 

sb.Append(XXX); 

,改變

Print(XXX, XXX); 

sb.Append(Print(XXX, XXX)) 

現在的方法是這樣的:

private string Print(Node node, int padding) { 
    StringBuilder sb = new StringBuilder(); 
    if (node != null) { 
     if (node.rChild != null) { 
      sb.Append(Print(node.rChild, padding + 4)); 
     } 
     if (padding > 0) { 
      sb.Append(" ".PadLeft(padding)); 
     } 
     if (node.rChild != null) { 
      sb.Append("/\n"); 
      sb.Append(" ".PadLeft(padding)); 
     } 
     sb.Append(node.value.ToString() + "\n "); 
     if (node.lChild != null) { 
      sb.Append(" ".PadLeft(padding) + "\\\n"); 
      sb.Append(Print(node.lChild, padding + 4)); 
     } 
    } 
    return sb.ToString(); 
} 

在這之後,你應該能夠改變參數的Print方法在自己的返回一個字符串。

相關問題