2013-02-23 5 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() является поиском funtion – User14229754

+0

@ User14229754 Да, это моя вина. Я нашел его во втором чтении. Я уже удалил этот комментарий. –

Смежные вопросы