C++ 逻辑错误(布尔值)
C++ Logic Error (boolean)
template <class T>
bool BST<T>::printSubtree(T item)
{
int id;
bool result;
if (root==NULL)
{
cout << "Empty Tree, Please insert data" << endl;
return false;
}
cout << "Enter ID to print sub-tree" << endl;
cin >> id;
result=searchSubTree(id, item);
if(result == false)
{
cout << "Record Not Found" << endl << endl;
}
//preOrderPrint();
return true;
}
template <class T>
bool BST<T>::searchSubTree(int target, T &item)
{
BTNode<T> *cur, *curtemp;
bool flag = false;
if (root==NULL)
{
cout << "Empty Tree, Please insert data" << endl;
return false;
}
cur = root;
curtemp = root;
while(!flag && cur!= NULL)
{
if(curtemp->item.id == target)
{
flag = true;
root = curtemp; //promote desired node to become root temporarily
inOrderPrint();
flag = true;
}
else if (curtemp->item.id < target) //target value greater than current value, search right sub-tree
{
curtemp = curtemp->right;
}
else if (curtemp->item.id > target) //search left sub-tree
{
curtemp = curtemp -> left;
}
root = cur; //set the root position to its ori place
}
return flag;
}
在上面的代码中,一切正常 运行。但是,为什么我试图输入一个不存在的值(id input),我的程序就崩溃了,它无法继续if(result == false)
。我可以知道这里有什么问题吗?
感谢您的指导!
您的 while 语句应使用 curtemp 而不是 cur。
while(!flag && curtemp!= NULL)
template <class T>
bool BST<T>::printSubtree(T item)
{
int id;
bool result;
if (root==NULL)
{
cout << "Empty Tree, Please insert data" << endl;
return false;
}
cout << "Enter ID to print sub-tree" << endl;
cin >> id;
result=searchSubTree(id, item);
if(result == false)
{
cout << "Record Not Found" << endl << endl;
}
//preOrderPrint();
return true;
}
template <class T>
bool BST<T>::searchSubTree(int target, T &item)
{
BTNode<T> *cur, *curtemp;
bool flag = false;
if (root==NULL)
{
cout << "Empty Tree, Please insert data" << endl;
return false;
}
cur = root;
curtemp = root;
while(!flag && cur!= NULL)
{
if(curtemp->item.id == target)
{
flag = true;
root = curtemp; //promote desired node to become root temporarily
inOrderPrint();
flag = true;
}
else if (curtemp->item.id < target) //target value greater than current value, search right sub-tree
{
curtemp = curtemp->right;
}
else if (curtemp->item.id > target) //search left sub-tree
{
curtemp = curtemp -> left;
}
root = cur; //set the root position to its ori place
}
return flag;
}
在上面的代码中,一切正常 运行。但是,为什么我试图输入一个不存在的值(id input),我的程序就崩溃了,它无法继续if(result == false)
。我可以知道这里有什么问题吗?
感谢您的指导!
您的 while 语句应使用 curtemp 而不是 cur。
while(!flag && curtemp!= NULL)