【问题标题】:BinTree.BinaryTree<T> requires 1 type arguments?BinTree.BinaryTree<T> 需要 1 个类型参数?
【发布时间】:2012-08-08 18:25:05
【问题描述】:

编辑: 填充树的最佳方法是什么?我现在正在添加 10 个随机数

BinTree<int> myTree = new BinTree<int>();
            int Value;

            Console.WriteLine("Inserting Values:  ");
            Random random = new Random();
            for (int i = 1; i <= 10; i++)
            {
                Value = random.Next(100);
                Console.Write(Value + " ");

               myTree.node(Value);
            }

但是

> myTree.node(Value);

继续出错 “错误 1 ​​'BINTREE.BinTree' 不包含 'node' 的定义,并且找不到接受 'BINTREE.BinTree' 类型的第一个参数的扩展方法 'node'(你是缺少 using 指令或程序集引用?) "

 class BinTree<T> where T : IComparable
    {
        private NODE<T> root;

        public BinTree()
        {
            root = null;
        }

        public BinTree(NODE<T> node)
        {
            root = node;
        }



//order algorithms
        public void PreOrder()
        {
            PREORDER(root);
        }

        private void PREORDER(NODE<T> tree)                          
        {                                                                
            if (tree != null)
            {
                Console.Write(tree.Data);                              
                PREORDER(tree.Left);                                   
                PREORDER(tree.Right);                                  
            }
        }

        public void PostOrder()
        {
            POSTORDER(root);
        }

        private void POSTORDER(NODE<T> tree)                            
        {                                                                 
            if (tree != null)
            {
                POSTORDER(tree.Left);                                     
                POSTORDER(tree.Right);                                    
                Console.WriteLine(tree.Data);                             
            }
        }

        public void InOrder()
        {
            INORDER(root);
        }

        private void INORDER(NODE<T> tree)                              
        {                                                                 
            if (tree != null)
            {
                INORDER(tree.Left);                                       
                Console.WriteLine(tree.Data);                             
                INORDER(tree.Right);                                      
            }
        }

【问题讨论】:

  • 首先不能从类型名中调用实例方法。其次,您为什么要尝试从类外调用私有方法?这里到底发生了什么?
  • 从技术上讲,该调用是对公共实例方法的调用。为了调用类方法(不是实例),您必须实例化一个变量。或者方法/属性或您要使用的任何内容都应该是静态的。在这种情况下,如果您确实调用了它并且它是静态的,那么您很可能会收到错误/异常,因为在公共 InOrder() 方法中,您将调用私有实例方法......但是是什么实例?

标签: c# tree binary-tree binary-search-tree


【解决方案1】:

这里发生了几件事。 具体错误是因为您引用的类 BinaryTree 没有泛型参数,或者您在类的定义中看到 T

但是,您的代码还有其他问题:

1) 不实例化类就不能访问非静态成员。 AKA 类定义不知道你要操作什么数据。

2) 您正在尝试调用无法访问的私有inOrder 例程。注意小写和大写 i 的区别。你想拨打公众号InOrder()

您的最终代码应如下所示:

BinaryTree<int> myBinaryTree = new BinaryTree<int>();
myBinaryTree.InOrder();

但是,此代码将不起作用,因为您有一个未填充的树(即使根节点为空)。

编辑: 不工作是指不会产生任何输出。查看 BinaryTree 的类定义,您将需要添加填充树的方法,以便有效地测试打印树的方法。

【讨论】:

    【解决方案2】:

    因为它是通用的,所以你必须传入你看到的类型,这是通过类型很重要的对象使用的类型。

    【讨论】:

    • 看詹姆斯的回答,他提供了一个例子。
    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2017-10-23
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多