我正在尝试在BT中进行搜索操作。例如:
3 (Root)
5 1
6 2 0 8
这是我的BT,这是我为搜索编写的代码。
Node* search(Node *root,int key)
{
if(root)
{
if(root->key==key)
{
cout<<root->key<<endl;
return root;
}
search(root->left,key);
search(root->right,key);
}
}
它是一个带有条件的预先遍历遍历,当我找到我想要的节点时,我应该返回它。 例如,如果我调用search(root,2),搜索应该返回一个指向包含值2的节点的Node *指针。
我相信当条件满足后我的代码返回时,它只返回外部调用n并不完全退出。例如,如果A调用B调用C,n然后在C中返回,则它将值返回到B而不是调用A的函数。
我无法理解如何解决这个问题。我对递归仍然很陌生,所以很难想象事物。
任何帮助表示赞赏!
答案 0 :(得分:1)
问题1:当找不到请求的值时,您需要返回值。在你的功能结束时return NULL;
。
问题2:当你递归时,你将找到结果的工作委托给另一个函数调用 - 然后你需要在找到它时返回该结果。所以你应该这样做:
Node* r = search(root->right, key);
if (r) return r;
答案 1 :(得分:0)
Node* search(Node *root, int key){
if(root){
if(root->key == key){
return root;
}
Node *ret;
(ret = search(root->left, key)) || (ret = search(root->right, key));
return ret;
}
return NULL;
}
答案 2 :(得分:0)
满足条件后添加退出函数,以减少程序的开销。还添加未找到的条件
if(root->key==key)
{
cout<<root->key<<endl;
return root;
exit(-1);
}