在二叉树(BT)中搜索不是BST

时间:2014-07-28 04:46:31

标签: c search binary-tree

我正在尝试在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的函数。

我无法理解如何解决这个问题。我对递归仍然很陌生,所以很难想象事物。

任何帮助表示赞赏!

3 个答案:

答案 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); 
    }