2012-08-08 4 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); 

으로 erroring 유지 순간에 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

+0

기술적 인면에서는 public 인스턴스 메서드를 호출했습니다. 클래스 메소드 (인스턴스가 아닌)를 호출하려면 변수를 인스턴스화해야합니다. 또는 메서드/속성 또는 사용하려는 것은 정적이어야합니다. 이 경우에 호출하고 정적 인 경우 공용 InOrder() 메서드에서 private 인스턴스 메서드를 호출하기 때문에 오류/예외가 발생할 가능성이 높습니다. – Landern

답변

3

여기에 몇 가지 일이 있습니다. 일반적인 오류없이 BinaryTree 클래스를 참조하고 있거나 클래스 정의에서 볼 수있는 T이라는 특정 오류가 있습니다.

1) 클래스를 인스턴스화하지 않고 비 정적 멤버에 액세스 할 수 없습니다

그러나 코드에 다른 문제가 있습니다. 클래스 정의는 조작하려는 데이터를 알지 못합니다.

2) 액세스 할 수없는 개인 inOrder 루틴을 호출하려고합니다. 대소 문자 i의 차이점에 유의하십시오. 당신은 다음과 비슷한 모습이 될 것입니다 공공 InOrder()

최종 코드를 호출 할 : 당신이 채워지지 않은 나무를 가지고

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

그러나,이 코드는 작동하지 않습니다 (심지어 루트 노드가 null).

편집 : 출력이 생성되지 않음을 의미합니다. BinaryTree에 대한 클래스 정의를 살펴보면 트리를 인쇄하는 방법을 효과적으로 테스트하기 위해 트리를 채우는 방법을 추가해야합니다.

0

일반형이기 때문에 유형을 중요하게 여기는 곳에 사용되는 유형을 전달해야합니다. 유형이 중요 할 때 객체를 통해 사용되는 유형입니다.

+0

제임스 대답을보세요, 그는 예제를 제공합니다. – Landern

관련 문제