【问题标题】:C# - Binary Tree IssuesC# - 二叉树问题
【发布时间】: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


【解决方案1】:

从上面的公共链:

  • 您需要将root 节点传递给binTree 否则它将无法在inOrder 方法中执行任何操作。 (BinTree&lt;int&gt; tree = new BinTree&lt;int&gt;();)
  • 您需要一个string 才能传递给inOrder 方法调用。您可以使用StringBuilder 来提高性能并消除对ref 的依赖

fiddle 包含经过调整的代码副本。

【讨论】:

  • 感谢您的回答、细分和示例。 :)
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 2012-08-18
  • 2011-07-24
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多