2013-07-30 12 views
6

Also habe ich C# im letzten Monat gelernt und im Moment kämpfe ich mit Binary Trees.C# - Einfacher Binärbaum

Meine Frage ist, wie kann ich meinen Baum zum Konsolenfenster aufrufen? Ich habe versucht, Console.WriteLine(tree.Data); Aber dies scheint zu schreiben 54 zu meinem Konsolenfenster.

Hier ist mein Code, wenn Sie es überprüfen müssen aus:

Hauptdatei

static void Main(string[] args) 
{ 
    //Creating the Nodes for the Tree 
    Node<int> tree = new Node<int>('6'); 
    tree.Left = new Node<int>('2'); 
    tree.Right = new Node<int>('5'); 

    Console.WriteLine("Binary Tree Display"); 
    Console.WriteLine(tree.Data); 
    Console.ReadLine(); 
} 

Knotenklasse

class Node<T> where T : IComparable 
{ 
    private T data; 
    public Node<T> Left, Right; 

    public Node(T item) 
    { 
     data = item; 
     Left = null; 
     Right = null; 
    } 
    public T Data 
    { 
     set { data = value; } 
     get { return data; } 
    } 
} 

Gibt es andere Methoden meines Baum nennen? oder mache ich etwas falsch?

+0

einfach die Antworten unten klären Sie einen 'char' Typen konvertieren, die Sie mit dem Zeichen' '6'' mit Apostroph erstellt.Der Typ "char" wird implizit in den äquivalenten Wert "int" konvertiert, wobei der ganzzahlige Wert "54" das Zeichen "6" darstellt. Siehe http://msdn.microsoft.com/en-us/library/x9h8tsay%28v=vs.110%29.aspx –

Antwort

7

Der Grund, warum es gerade 54 zeigt, ist, weil das das ist, was (int)'6' ist!

Sie rufen tree.Data, die in diesem Fall '6' umgewandelt in int.


Ich stelle mir vor, was Sie versuchen zu tun ist entweder 6 zurück, die Sie mithilfe von

new Node<char>('6'); 

oder durch

new Node<int>(6); 

(More in separate answer, removed for clarity)

tun könnte
+1

[wird fortgesetzt ..] klingt besser :) –

+1

@lazyberezovsky: [Alternativ ...] (http://www.youtube.com/watch?v=iwbsx6LvnfY&t=0m51s) noch spannender! –

0

Ich glaube, der beste Weg, dies zu tun wäre, um eine präzise rekursive Tree Traversal-Algorithmus, der den Wert jedes Knotens in der bestimmten Reihenfolge, die Sie ihnen begegnen, auszudrucken. Da es in den C# -Bibliotheken eine vordefinierte Methode dafür gibt, bin ich mir dessen nicht bewusst. Viel Glück!

2
Node<int> tree = new Node<int>(6); 

6, und nicht '6'. Jetzt wird der erwartete Wert gedruckt. Ihr Code wirft still char Wert ‚6‘, auf ganze Zahl, die Ergebnis ergibt 54.

2

(Moved from previous answer for clarity)

Wenn Sie versuchen, alle Daten zurückzugeben, für Ihre Node<T> Ich glaube, einen besseren Weg zu gehen es wäre die ToString Methode in Ihrer Node<T> Klasse außer Kraft zu setzen, wie so:

public override string ToString() 
{ 
    var leftString = this.Left != null ? this.Left.ToString() : "null"; 
    var rightString = this.Right != null ? this.Right.ToString() : "null"; 
    var dataString = this.Data != null ? this.Data.ToString() : "null"; 

    leftString = String.Join("\n", leftString.Split('\n').Select(a => "\t" + a)); 
    rightString = String.Join("\n", rightString.Split('\n').Select(a => "\t" + a)); 

    return String.Format("\nData: {0}\n" 
         + "Left: {1}\n" 
         + "Right: {2}", 
         dataString, leftString, rightString); 
} 

Console.WriteLine(tree.ToString()); Dann rufen, die in dem folgenden Ergebnisse:

Data: 54 
Left: 
    Data: 50 
    Left: null 
    Right: null 
Right: 
    Data: 53 
    Left: null 
    Right: null 

Dies ist nicht die schönste Umsetzung, aber ich denke, beweist den Punkt.

Für eine schönere Implementierung sehen this answer