搜索二进制树功能不起作用c ++

时间:2013-03-18 09:21:11

标签: c++

我试图实现二叉搜索树:

template <typename T>
bool Tree<T>::search(TreeNode<T> *ptr, const T &key) {
if (ptr == 0) {
 cout<<"No such data: "<<key<<" in the tree"<<endl; 
 return false;
 }
else{
if (ptr->data == key) {
    cout<<"Find a node whose data is "<<key<<endl;
      return true;
} 
else if (ptr->data < key)  return search(ptr->leftPtr,key);

else  return search(ptr->rightPtr,key);
}
}

但是无论树是否包含键值,结果总是返回false。 你们可以帮我查一下代码吗?我试过调试,但仍然不知道。

谢谢!

1 个答案:

答案 0 :(得分:2)

用于左树降序的遍历比较器是向后的。因此,只要您错误地进入 right 树,就不会有机会找到该值。只有root和root只能被正确找到。

此:

if (ptr->data < key)
    return search(ptr->leftPtr,key);
else
    return search(ptr->rightPtr,key);

应该是这样的:

if (key < ptr->data) // <== note key is LESS THAN node.
    return search(ptr->leftPtr,key);
else
    return search(ptr->rightPtr,key);

那就是说,考虑一下:

template <typename T>
bool Tree<T>::search(TreeNode<T> *ptr, const T &key)
{
    if (ptr == 0) {
        cout<<"No such data: "<<key<<" in the tree"<<endl;
        return false;
    }

    if (key < ptr->data)
        return search(ptr->leftPtr, key);
    else if (ptr->data < key)
        return search(ptr->rightPtr, key);

    cout<<"Found a node whose data is "<< key << endl;
    return true;
}