2013-02-23 10 views
0
template <class T> 
struct TreeNode{ 
    string value; 
    T key; 
    TreeNode<T> *Parent; 
    TreeNode<T> *LeftChild; 
    TreeNode<T> *RightChild; 
    TreeNode (T k,string Val) 
    { 
      this->value=Val; 
      this->key=k; 
      this->Parent=NULL; 
      this->LeftChild=NULL; 
      this->RightChild=NULL; 
    } 
}; 

template <class T> 
class BinaryTree{ 
    private: 
     TreeNode<T> *Root;   
    public: 
     BinaryTree(); 
     ~BinaryTree(); 
     void insertNode(T Key,string Val); 
     void deleteNode(T Key); 
     string searchNode(T Key); 
     void UpdateKey(T newkey,T oldkey); 
     int Height(TreeNode<T> *node); 
     int height(); 
}; 




template <class T> 
string BinaryTree<T>::searchNode(T Key) 
{   
TreeNode<T> *temp=Root; 
while (temp!=NULL) 
{ 
     if (temp->key==Key) 
     { 
      cout<<temp->key<<endl;        
      return temp->value; 
     } 
     if (temp->key>Key) 
     { 
      temp=temp->LeftChild; 
     } 
     else if (temp->key<Key) 
     { 
      temp=temp->RightChild; 
     }     
}  
return "\0"; 
} 

이진 검색 트리를 만들고 있습니다. 그러나 검색 기능을 실행할 때 값이 트리에 존재하더라도 항상 NULL 값을 반환합니다. 내 생성자가 올바르지 않거나 검색 기능에 문제가 있습니다. 나는 그 문제를 알아낼 수 없다. 여기 생성자입니다 : 모든이진 검색 트리 (검색 기능)

template <class T> 
BinaryTree<T>::BinaryTree() 
{ 
Root=NULL;      
ifstream fin; 
fin.open("names.txt"); 
string buffer; 
T buff; 
while (!fin.eof()) 
{ 
     getline(fin,buffer,'~'); 
     fin>>buff; 

     TreeNode<T> *temp,*temp1; 
     temp=Root; 
     temp1=temp; 
     while (temp!=NULL) 
     { 
      temp1=temp; 
      TreeNode<T> *Right=temp->RightChild; 
      TreeNode<T> *Left=temp->LeftChild; 
      if (temp->key>buff) 
      { 
       temp=temp->LeftChild; 
      } 
      else if (temp->key<buff) 
      { 
       temp=temp->RightChild; 
      } 
      else 
      { 
       temp=temp->LeftChild; 
      } 
     } 
     if (temp!=Root) 
     temp->Parent=temp1; 
     temp=new TreeNode<T>(buff,buffer); 
} 
fin.close(); 
} 
+0

트리를 사용할 때 인덱스의 유형은 무엇입니까? – speeder

+0

int 유형입니다. – User14229754

답변

0

첫째,이 생성자에 속하지 않습니다. 이 방법은 readFile()이거나 그 중 일부는 operator>>()이어야합니다.

while (!fin.eof()) 

대신

while (std::getline(fin, buffer, '~')) 

에 체크를 할에 읽기 기능

에 이제

확인하지 마십시오.

그리고 마지막으로, 어떤 temp 변수에만 트리에 아무 것도 추가하지 않습니다. 이것은 검색 기능이 실패한 이유 일 수 있습니다.

+0

검색 기능을 보여 줬습니다 – User14229754

+0

SearchNode()가 검색 ​​기능입니다 – User14229754

+0

@ User14229754 예, 이것은 제 잘못입니다. 나는 두 번째 독서에서 그것을 발견했다. 나는 이미 그 주석을 삭제했다. –