Wie korrigiere ich eine implizite Konvertierung Fehler in BST C # Code?
-
03-07-2019 - |
Frage
Ich schrieb diesen Code
Ich habe diese Fehler
Kann nicht implizit Typ x.Program.TreeNode‘auf 'int' // auf findmin konvertieren
Kann nicht implizit Typ x.Program.TreeNode‘auf 'int' // auf FindMax konvertieren
und ist mein Haupt korrekt oder fehlt somethin?
und wie kann ich die Knoten, Blätter zählen und die Höhe (müssen nur Hinweise) erhalten
class Program
{
static void Main(string[] args)
{
BinarySearchTree t = new BinarySearchTree();
t.insert(ref t.root, 10);
t.insert(ref t.root, 5);
t.insert(ref t.root, 6);
t.insert(ref t.root, 17);
t.insert(ref t.root, 2);
t.insert(ref t.root, 3);
BinarySearchTree.print(t.root);
}
public class TreeNode
{
public int n;
public TreeNode _left;
public TreeNode _right;
public TreeNode(int n, TreeNode _left, TreeNode _right)
{
this.n = n;
this._left = _left;
this._right = _right;
}
public void DisplayNode()
{
Console.Write(n);
}
}
public class BinarySearchTree
{
public TreeNode root;
public BinarySearchTree()
{
root = null;
}
public void insert(ref TreeNode root, int x)
{
if (root == null)
{
root = new TreeNode(x, null, null);
}
else
if (x < root.n)
insert(ref root._left, x);
else
insert(ref root._right, x);
}
public int FindMin()
{
TreeNode current = root;
while (current._left != null)
current = current._left;
return current;
}
public int FindMax()
{
TreeNode current = root;
while (current._right != null)
current = current._right;
return current;
}
public TreeNode Find(int key)
{
TreeNode current = root;
while (current.n != key)
{
if (key < current.n)
current = current._left;
else
current = current._right;
if (current == null)
return null;
}
return current;
}
public void InOrder(ref TreeNode root)
{
if (root != null)
{
InOrder(ref root._left);
root.DisplayNode();
InOrder(ref root._right);
}
}
public static void print(TreeNode root)
{
if (root != null)
{
print(root._left);
Console.WriteLine(root.n.ToString());
print(root._right);
}
}
Lösung
Da Sie benötigen (FindMin
/ FindMax
) eine int
zurückzukehren, tun Sie current.n
bedeuten?
Aktualisiert: für Blätter und Knoten zu zählen, wie etwa (wie zB Methoden der TreeNode
):
public int CountNodes()
{
int count = 1; // me!
if (_left != null) count += _left.CountNodes();
if (_right != null) count += _right.CountNodes();
return count;
}
public int CountLeaves()
{
int count = (_left == null && _right == null) ? 1 : 0;
if (_left != null) count += _left.CountLeaves();
if (_right != null) count += _right.CountLeaves();
return count;
}
Wenn ich den Punkt verpasst haben, lassen Sie mich wissen ...
Andere Tipps
Ihre FindMin()
und FindMax()
Methoden versuchen TreeNode
Objekte zurückzukehren, aber die Unterschrift sagt sie kehrt int
s. Wie es scheint nicht, dass die Methoden in dem Programm verwendet werden, prehaps man kann sich entfernen?