2013-07-30 15 views
6

Quindi, ho imparato C# durante il mese scorso e al momento sto lottando con Alberi binari.C# - Albero binario semplice

La mia domanda è: come posso chiamare il mio albero alla finestra della console? Ho provato Console.WriteLine(tree.Data); Ma sembra scrivere 54 alla mia finestra della console.

Ecco il mio codice, se avete bisogno di check it out:

File principale

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

Nodo Classe

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

Ci sono altri metodi di chiamare mio albero? o sto facendo qualcosa di sbagliato?

+0

Giusto per chiarire le risposte qui di seguito, si sta convertendo un tipo 'char' cui è stato creato utilizzando letterale' '6'' con apostrofi.Il tipo 'char' viene convertito implicitamente nel valore equivalente' int', per cui il valore intero "54" rappresenta il carattere '6'. Vedi http://msdn.microsoft.com/en-us/library/x9h8tsay%28v=vs.110%29.aspx –

risposta

7

Il motivo per cui sta mostrando solo 54 è perché è quello che è (int)'6'!

Si chiama tree.Data che restituisce in questo caso '6' cast a int.


immagino quello che stai cercando di fare è o tornare 6 che si potrebbe fare utilizzando

new Node<char>('6'); 

o

new Node<int>(6); 

(More in separate answer, removed for clarity)

+1

[continua] .. suona meglio :) –

+1

@lazyberezovsky: [In alternativa ...] (http://www.youtube.com/watch?v=iwbsx6LvnfY&t=0m51s) ancora più elettrizzante! –

0

Credo che il modo migliore per farlo sarebbe quello di implementare un conciso algoritmo di attraversamento dell'albero ricorsivo che stampi il valore di ciascun nodo nell'ordine particolare scelto per incontrarli. Per quanto esiste un metodo pre-scritto per farlo all'interno delle librerie C#, non ne sono a conoscenza. Buona fortuna!

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

6 e non "6". Ora verrà stampato il valore atteso. Il tuo codice è in silenzio getta valore char '6' a intero, che dà risultato 54.

2

(Moved from previous answer for clarity)

Se stai cercando di restituire tutti i dati per la vostra Node<T> penso che un modo migliore di andare su sarebbe l'override del metodo ToString nella classe Node<T> in questo modo:

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

quindi chiamare Console.WriteLine(tree.ToString()); che si traduce nella seguente:

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

Questa non è l'implementazione più bella ma penso che questo sia il punto.

Per un'implementazione più bella vedere this answer

Problemi correlati