2012-07-25 140 views
2

我正在實現一個C#程序,它具有一些二叉樹。在VS中可視化二叉樹

是否有一些插件可以用於調試的visual studio?

我需要它在運行時繪製樹。

+0

會在哪裏你畫的?在[可視化工具](http://msdn.microsoft.com/en-us/library/zayyhzts.aspx)中? – 2012-07-25 15:29:52

+0

@MarkByers好吧,聽起來不錯,你知道這樣一個可視化器嗎?或者我應該從頭開始編寫它?我不確定這是值得的努力.... – sara 2012-07-25 15:32:51

回答

2

下面是一個簡單的二叉樹,其中有一個將其轉換爲字符串表示的方法。你可能有自己的二叉樹類,但是你可以用這個相同的通用算​​法。

這裏我使用單個選項卡來分隔每個節點。如果每個節點的內容的ToString大於8(?)個字符,則可能需要使用更大數量的空格,多個選項卡,或者在每個節點的字符串的開頭添加一些字符以幫助您將其可視化。

public class Node<T> 
{ 
    public T Data { get; set; } 
    public Node<T> Left { get; set; } 
    public Node<T> Right { get; set; } 

    public string displayNode() 
    { 
     StringBuilder output = new StringBuilder(); 
     displayNode(output, 0); 
     return output.ToString(); 
    } 

    private void displayNode(StringBuilder output, int depth) 
    { 

     if (Right != null) 
      Right.displayNode(output, depth+1); 

     output.Append('\t', depth); 
     output.AppendLine(Data.ToString()); 


     if (Left != null) 
      Left.displayNode(output, depth+1); 

    } 
} 

然後到實際使用它:

Node<string> root = new Node<string>() { Data = "root" }; 
root.Left = new Node<string>() { Data = "1" }; 
root.Right = new Node<string>() { Data = "2" }; 

root.Left.Left = new Node<string>() { Data = "3" }; 
root.Left.Right = new Node<string>() { Data = "4" }; 

Console.WriteLine(root.displayNode()); 
2

不是最好的方式,如果樹大可能不是很好,但你可以創建這樣一個遞歸函數:

public String ToString() 
{ 
    return id + "{" + a.ToString() + ";" + b.ToString() + "}"; 
} 

隨着:id當前節點的ID,ab的兩個子

編輯

你需要絕對肯定這是一棵樹,它不含有任何週期。

+0

值得注意的是,如果圖中包含任何循環,那麼根據定義,它不是一個二叉樹(或者甚至是一棵樹)。 OP本身已經擁有你需要的所有約束條件。 – Servy 2012-07-25 16:02:51

+0

確實如此,但是當您需要調試時,可能是因爲您在生成和/或循環中遇到問題,並找到了地點或原因。 – wishper 2012-07-26 08:45:11