2012-08-08 29 views
0

编辑: 什么是最好的方式来填充树?我此刻BinTree.BinaryTree <T>需要1个类型参数?

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

保持与示数增加10个随机号码“错误1‘BINTREE.BinTree’不包含‘节点’,并没有扩展名的定义方法“节点”接受类型“BINTREE.BinTree”的第一个参数可以找到(是否缺少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);          
      } 
     } 
+0

首先,您不能从类型名称中调用实例方法。其次,你为什么要从课外调用私人方法?这里到底发生了什么? – Dan 2012-08-08 18:29:46

+0

从技术上讲,这个调用是针对公共实例方法的。为了调用一个类方法(不是实例),你必须实例化一个变量。或者方法/属性或任何你想使用的应该是静态的。在这种情况下,如果你确实调用它并且它是静态的,那么很有可能你会得到一个错误/异常,因为在公共InOrder()方法中,你将调用一个私有实例方法......但实例是什么? – Landern 2012-08-08 18:35:20

回答

3

这里有几件事情正在进行。 具体的错误是因为你没有泛型参数引用类BinaryTree,或者你在类的定义中看到T

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

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

2)您正在尝试呼叫无法访问的专用inOrder例程。注意大写字母i与小写字母之间的区别。你要拨打的公共InOrder()

您的最终代码应该是这个样子:

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

但是,当你有一个无人居住的树该代码将无法正常工作(甚至根节点为空)。

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

0

因为它是通用的,所以您必须传入在您看到的类型中使用的类型,该类型通过类型非常重要的对象使用。

+0

看看詹姆斯的回答,他举了一个例子。 – Landern 2012-08-08 18:38:01

相关问题