C# Zeigt einen Binären Suchbaum in der Konsole
Habe ich einfachen binären Suchbaum
public class BNode
{
public int item;
public BNode right;
public BNode left;
public BNode(int item)
{
this.item = item;
}
}
public class BTree
{
private BNode _root;
private int _count;
private IComparer<int> _comparer = Comparer<int>.Default;
public BTree()
{
_root = null;
_count = 0;
}
public bool Add(int Item)
{
if (_root == null)
{
_root = new BNode(Item);
_count++;
return true;
}
else
{
return Add_Sub(_root, Item);
}
}
private bool Add_Sub(BNode Node, int Item)
{
if (_comparer.Compare(Node.item, Item) < 0)
{
if (Node.right == null)
{
Node.right = new BNode(Item);
_count++;
return true;
}
else
{
return Add_Sub(Node.right, Item);
}
}
else if (_comparer.Compare(Node.item, Item) > 0)
{
if (Node.left == null)
{
Node.left = new BNode(Item);
_count++;
return true;
}
else
{
return Add_Sub(Node.left, Item);
}
}
else
{
return false;
}
}
public void Print()
{
Print(_root, 4);
}
public void Print(BNode p, int padding)
{
if (p != null)
{
if (p.right != null)
{
Print(p.right, padding + 4);
}
if (padding > 0)
{
Console.Write(" ".PadLeft(padding));
}
if (p.right != null)
{
Console.Write("/\n");
Console.Write(" ".PadLeft(padding));
}
Console.Write(p.item.ToString() + "\n ");
if (p.left != null)
{
Console.Write(" ".PadLeft(padding) + "\\\n");
Print(p.left, padding + 4);
}
}
}
}
wo kann ich das einfügen von Werten wie
BTree btr = new BTree();
btr.Add(6);
btr.Add(2);
btr.Add(3);
btr.Add(11);
btr.Add(30);
btr.Add(9);
btr.Add(13);
btr.Add(18);
Möchte ich die Anzeige mein Baum in meiner Konsolenanwendung. Ich habe eine btr.Print();
zeigt mein Baum von Links nach rechts (6
ist die Wurzel) - aber ich bin nicht glücklich mit ihm.
Frage: gibt es einen besseren Weg, um diese Struktur innerhalb einer Konsolenanwendung? Auch eine Verbesserung dieser Print()
mir helfen würde.
- Ich denke, der Ansatz, in dieser anderen link sieht schöner und kompakter: stackoverflow.com/a/1649223/831138 . "Compact" in dem Sinne, dass es passen mehr Informationen in der gleichen Platz auf dem Bildschirm... natürlich, es geht um stretch es senkrecht, aber mit dem Scrollbalken der Konsole sollte nicht das problem sein... ausgeführt, dass der horizontale Abstand ist ein problem.
- Mögliche Duplikate von Baum-Visualisierung-Algorithmus
- stackoverflow.com/questions/801740/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe endete mit der folgenden Methode, mit der Sie drucken beliebigen Teilbaum:
Wie Sie sehen können, ich habe einige Parameter, die Einfluss auf die Formatierung. Standardmäßig erzeugt es die kompakteste Darstellung.
Um mit ihm zu spielen, hab ich geändert, die
BTree
- Klasse wie folgt:Mithilfe von Beispieldaten, hier sind einige Ergebnisse:
btr.Root.Print();
btr.Root.Print(textFormat: "(0)", spacing: 2);
UPDATE: IMO das Standard-format oben ist kompakt und gut lesbar, aber nur zum Spaß, der Algorithmus angepasst, um mehr zu produzieren "grafische" Ausgabe (
textFormat
undspacing
Parameter entfernt):und das Ergebnis ist:
Dies ist mein nehmen auf Sie:
Habe ich
PrintPretty
zu BNode, und ich habe entfernt die zweitePrint
Funktion, die Sie hatten in BTree.(Edit: ich habe den Baum mehr lisible durch die änderung der ursprünglichen chars zeichnen Sie die äste des Baumes)
Dies ist das Ergebnis (mehr kompakt, wie ich schon erwähnt habe):
Edit: der folgende code wurde geändert, um zu zeigen, die info über Links-rechts:
Das Ergebnis: