C# - 二叉树问题
C# - Binary Tree Issues
据我所知,我的程序 应该 可以工作,但是,我在使用 ref 关键字时遇到了困难。我们还不希望使用 Insert() 方法。但是,我很难尝试使用遍历方法,因为每次出现错误时,都是关于 ref 缺少参数或其他原因。我知道我可能搞砸了我的 Main 方法,但那是由于试验并试图让它工作。我确实有一个带有 Get 和 Setter 方法的 NodeClass,但是,问题本质上是 ref 关键字。我错过了什么?我添加了字符串但出现错误,我尝试使用缓冲区时出现错误。
二叉树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() + ",";
}
}
}
计划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();
}
}
有人可以帮助我吗?谢谢。
如果有明显的问题,请提前致歉。
来自上述公共链:
- 您需要将
root
节点传递给 binTree
否则它将无法在 inOrder
方法中执行任何操作。 (BinTree<int> tree = new BinTree<int>();
)
- 您需要
string
才能传递到 inOrder
方法调用中。您可以使用 StringBuilder 来提高性能并消除对 ref
的依赖
fiddle 包含经过调整的代码副本。
据我所知,我的程序 应该 可以工作,但是,我在使用 ref 关键字时遇到了困难。我们还不希望使用 Insert() 方法。但是,我很难尝试使用遍历方法,因为每次出现错误时,都是关于 ref 缺少参数或其他原因。我知道我可能搞砸了我的 Main 方法,但那是由于试验并试图让它工作。我确实有一个带有 Get 和 Setter 方法的 NodeClass,但是,问题本质上是 ref 关键字。我错过了什么?我添加了字符串但出现错误,我尝试使用缓冲区时出现错误。
二叉树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() + ",";
}
}
}
计划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();
}
}
有人可以帮助我吗?谢谢。
如果有明显的问题,请提前致歉。
来自上述公共链:
- 您需要将
root
节点传递给binTree
否则它将无法在inOrder
方法中执行任何操作。 (BinTree<int> tree = new BinTree<int>();
) - 您需要
string
才能传递到inOrder
方法调用中。您可以使用 StringBuilder 来提高性能并消除对ref
的依赖
fiddle 包含经过调整的代码副本。