【发布时间】:2016-11-22 22:19:46
【问题描述】:
据我所知,我的程序应该可以工作,但是,我在使用 ref 关键字时遇到了困难。我们预计不会使用 Insert() 方法。但是,我很难尝试使用 traverse 方法,因为每次我遇到错误时,它都是关于 ref 参数丢失或其他东西。我知道我可能搞砸了我的 Main 方法,但那是由于试验并试图让它发挥作用。我确实有一个带有 Get 和 Setter 方法的 NodeClass,但是,问题本质上是 ref 关键字。我错过了什么?我添加了字符串我得到一个错误,我尝试使用缓冲区我得到一个错误。
二叉树类-
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() + ",";
}
}
}
程序类-
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();
}
}
有人可以帮助我吗?谢谢。
如果事情很明显,请提前道歉。
【问题讨论】:
-
预期的输出是
15,654,6,吗?因为这就是我清理一下后得到的。 -
没错。我正在使用 Traverse 方法; inOrder、PreOrder 和 PostOrder。 :)
-
这是我目前正在使用的:dotnetfiddle.net/9glXXY
-
1) 你需要贴一个字符串 (
string output;),2) 通过引用传递字符串 (tree.InOrder(ref output);)。我会注意到您最好传递StringBuilder而不是字符串引用以减少内存分配的数量(另外,在这种情况下您不需要ref)。或者 return 一个字符串,将当前节点附加到传入的字符串。 -
@jrbeverly 这是工作伙伴。想发布答案,以便我接受吗? :)
标签: c# binary-tree ref