2016-11-22 7 views
0

Nach meinem besten Wissen mein Programm sollte arbeiten, aber ich habe Schwierigkeiten mit dem Ref Schlüsselwort. Es wird noch nicht erwartet, dass wir eine Insert() - Methode verwenden. Allerdings habe ich Schwierigkeiten, die Traverse-Methoden zu verwenden, da jedes Mal, wenn ein Fehler auftritt, der Ref entweder ein Argument fehlt oder etwas anderes. Ich weiß, dass ich wahrscheinlich meine Main-Methode vermasselt habe, aber das liegt daran, zu experimentieren und zu versuchen, es zum Laufen zu bringen. Ich habe eine NodeClass mit Get und Setter-Methoden, das Problem ist jedoch im Wesentlichen das Schlüsselwort ref. Was vermisse ich? Ich habe einen String hinzugefügt Ich bekomme einen Fehler, ich habe versucht, den Puffer zu verwenden Ich erhalte einen Fehler.C# - Binary Tree Issues

BinaryTree Class-

class BinTree<T> where T : IComparable 
    { 
     private Node<T> root; 

     public BinTree() //creates an empty tree 
     { 
      root = null; 
     } 
     public BinTree(Node<T> node) //creates a tree with node as the root 
     { 
      root = node; 
     } 

     public void InOrder(ref string buffer) 
     { 
      inOrder(root, ref buffer); 
     } 

     private void inOrder(Node<T> tree, ref string buffer) 
     { 
      if (tree != null) 
      { 
       inOrder(tree.Left, ref buffer); 
       buffer += tree.Data.ToString() + ","; 
       inOrder(tree.Right, ref buffer); 
      } 

     } 

     public void Preorder(ref string buffer) 
     { 
      PreOrder(root, ref buffer); 
     } 

     public void PreOrder(Node<T> tree, ref string buffer) 
     { 
      if (tree != null) 
      { 
       buffer += tree.Data.ToString() + ","; 
       PreOrder(tree.Left, ref buffer); 
       PreOrder(tree.Right, ref buffer); 
      } 
     } 

     public void postOrder(ref string buffer) 
     { 
      PostOrder(root, ref buffer); 
     } 

     public void PostOrder(Node<T> tree, ref string buffer) 
     { 
      if (tree != null) 
      { 

       PostOrder(tree.Left, ref buffer); 
       PostOrder(tree.Right, ref buffer); 
       buffer += tree.Data.ToString() + ","; 
      } 
     } 
    } 

Programm Class-

class Program 
{ 
    static void Main(string[] args) 
    { 
     BinTree<int> tree = new BinTree<int>(); 

     Node<int> root = new Node<int>(6); 
     root.Left = new Node<int>(15); 
     root.Left.Right = new Node<int>(654); 

     tree.InOrder(ref , root.Data); 




     System.Console.WriteLine(); 
     Console.ReadLine(); 
    } 
} 

Könnte jemand mir vielleicht helfen? Vielen Dank.

Entschuldigung im Voraus, wenn es etwas offensichtlich ist.

+0

Ist die erwartete Ausgabe '15,654,6,'? Als das ist, was ich bekomme, nachdem ich es ein bisschen aufgeräumt habe. – jrbeverly

+0

Das ist richtig. Ich verwende Traverse-Methoden. InOrder, PreOrder und PostOrder. :) – JavaScriptGrasshopper

+0

Das, woran ich gerade arbeite: https://dotnetfiddle.net/9glXXY – jrbeverly

Antwort

0

Aus der obigen gemeinsamen Kette:

  • Sie müssen die root Knoten in die binTree sonst es in der Lage sein wird, nicht passieren nichts in den inOrder Methoden zu tun. (BinTree<int> tree = new BinTree<int>();)
  • Sie benötigen eine string, um in den Methodenaufruf inOrder überzugehen. Sie können StringBuilder verwenden, um Leistung zu verbessern und Vertrauen entfernen auf ref

Die fiddle enthält eine Kopie des Codes mit Anpassungen.

+0

Vielen Dank für die Antwort, Aufschlüsselung und Beispiel. :) – JavaScriptGrasshopper