2012-08-08 28 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

相關問題