C# - 二叉树问题

时间:2016-11-22 22:19:46

标签: c# binary-tree ref

据我所知,我的程序应该工作,但是,我在使用 ref 关键字时遇到了困难。我们不应该使用Insert()方法。但是,每次我收到错误时,我都很难尝试使用遍历方法,这与参数缺失或其他内容有关。我知道我可能搞砸了我的Main方法,但那是因为试验并试图让它工作。我确实有一个带有Get和Setter方法的NodeClass,但问题基本上是ref关键字。我错过了什么?我添加了字符串我得到一个错误,我试图使用缓冲区我得到一个错误。

BinaryTree类 -

 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();
    }
}

有人可能会帮助我吗?谢谢。

如果事情显而易见,请事先道歉。

1 个答案:

答案 0 :(得分:0)

来自上述共同链:

  • 您需要将root节点传递到binTree,否则将无法在inOrder方法中执行任何操作。 (BinTree<int> tree = new BinTree<int>();
  • 您需要string进入inOrder方法调用。您可以使用StringBuilder来提高效果并消除对ref
  • 的依赖

fiddle包含带有调整的代码副本。