template <class T>
void BinaryTree<T>::LoadTree(const char *file)
{
ifstream fin;
fin.open(file);
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;
}
}
temp=new TreeNode<T>(buff,buffer);
if (temp!=Root)
temp->Parent=temp1;
}
fin.close();
}
我想提出一個二進制搜索tree.This是我的一段代碼,我需要輸入其中包含一個名字和這樣的「亞歷克斯〜231423」密鑰的文件。是我的代碼製作正確的BST,因爲當我運行它時,有一個味精說:「這個應用程序已經請求運行時以不尋常的方式終止它。請聯繫應用程序的支持團隊獲取更多信息」。我真的不明白什麼是錯的。我將不勝感激。以前的問題就解決了任何幫助 **,但味精是出現了insertNode函數如下:二叉搜索樹
template <class T>
void BinaryTree<T>::insertNode(T Key,string Val)
{
TreeNode<T> *temp,*temp1;
temp=Root;
while (temp!=NULL)
{
temp1=temp;
if (temp->key>Key)
{
temp=temp->LeftChild;
}
else if (temp->key<Key)
{
temp=temp->RightChild;
}
}
temp=new TreeNode<T>(Key,Val);
temp->Parent=temp1;
}
這裏是樹節點部分
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;
}
};
Actually I was getting the error for search function,not insert function.I am sorry for inconvenience.here is the code
template <class T>
string BinaryTree<T>::searchNode(T Key)
{
TreeNode<T> *temp=Root;
while (temp!=NULL)
{
if (temp->key==Key)
{
return temp->value;
}
if (temp->key>Key)
{
temp=temp->LeftChild;
}
else if (temp->key<Key)
{
temp=temp->RightChild;
}
}
return NULL;
}
您是否搜索過類似主題?我想我在這裏讀了關於BST的最近三天... – 2013-02-25 13:32:48
你在做內存/指針有問題。使用調試器。 – Dariusz 2013-02-25 13:35:21
請看,這個http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong爲什麼它被認爲是不好的eof裏面循環條件或這個http:///stackoverflow.com/questions/730910/ifstream-object-eof-not-working – 2013-02-25 13:42:57