2012-07-25 5 views
2

일부 이진 트리가있는 C# 프로그램을 구현 중입니다.VS에서 이진 트리를 시각화하십시오.

디버깅에 사용할 수있는 Visual Studio에 추가 기능이 있습니까?

런타임에 트리를 그려야합니다.

+0

당신이 그것을 어디 을 그릴 것입니다

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()); 
? [시각화 프로그램] (http://msdn.microsoft.com/en-us/library/zayyhzts.aspx)? –

+0

@ MarkByers 글쎄, 좋은 소리, 그런 visualizer 알고 계십니까? 아니면 처음부터 다시 써야합니까? 나는 노력의 가치가 있는지 확신하지 못한다 .... – sara

답변

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); 

    } 
} 

그리고 실제로 그것을 사용 :

2

아니 가장 좋은 방법, 그리고 나무가 큰 경우 아마 매우 좋지 않다,하지만 당신은 같은 재귀 함수를 만들 수 있습니다 id 현재 노드의 ID, ab :와

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

두 아이

편집 당신은이 나무라고하고 어떤 사이클을 포함하지 않는다는 것을 확신 할 필요가

.

+0

그래프에 어떤 사이클이 포함되어 있다면 정의에 따라 이진 트리 (또는 심지어는 트리)가 아닌 것을 주목할 가치가있다. OP 자체에는 이미 필요한 모든 제약 조건이 있습니다. – Servy

+0

사실,하지만 디버깅 할 때 발생 및/또는주기에 문제가있어 어디서 또는 왜 발견 되었기 때문일 수 있습니다. – wishper

관련 문제