BST C#コードの暗黙的な変換エラーを修正するにはどうすればよいですか?
-
03-07-2019 - |
質問
このコードを書きました
これらのエラーがあります
findminでは暗黙的に型x.Program.TreeNode 'を' int 'に変換できません
暗黙的にタイプx.Program.TreeNode 'をfindmaxで' int 'に変換できません
そして、私の主な正しいものまたは不足しているものは何ですか?
ノードの数を数え、残して、高さを取得する方法(ヒントのみが必要)
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);
}
}
解決
int
を返すには( FindMin
/ FindMax
)が必要なので、 current.n
を意味しますか
更新済み:葉とノードのカウントについてはどうですか( 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;
}
要点を逃した場合はお知らせください...
他のヒント
FindMin()
および FindMax()
メソッドは TreeNode
オブジェクトを返そうとしていますが、署名は int
s。メソッドがプログラムで使用されているようには見えないので、おそらく削除できますか?
所属していません StackOverflow