问题描述
我遇到的问题是,对于某些键,我的函数有效,但对于某些键却无效。如果树中没有带有该键的元素,则该函数应返回一个指向key == givenKey
或NULL
的节点的指针。这是结构,下面是函数。
typedef struct node
{
int key;
struct node *l,*r;
}NodeT;
NodeT *search(NodeT *root,int givenKey)
{
if(root == NULL || root->key == givenKey)
return root;
search(root->l,givenKey);
search(root->r,givenKey);
}
NodeT *q = search(root,9);
NodeT *r = search(root,7);
printf("%p\n%p\n",q,r);
这是给定的二叉树:(例如q
获得正确的地址,但是r
将是NULL
,即使其中包含带有key = 7
的元素我们的二叉树。
如果您告诉我什么地方出了问题,我将不胜感激,因为我尝试了很多次更改功能,但是没有成功。我什至使用调试器浏览了我的代码,但似乎没有太大帮助。预先谢谢你!
解决方法
检查root是否包含密钥,并递归检查子级。
如果没有找到带有密钥的节点,它将返回NULL
。
NodeT* search(NodeT* root,int givenKey)
{
if (!root)
return NULL;
else if (root->key == givenKey)
return root;
NodeT* search_child_result = NULL;
if (root->l)
{
search_child_result = search(root->l,givenKey);
if (search_child_result)
return search_child_result;
}
if (root->r)
{
search_child_result = search(root->r,givenKey);
if (search_child_result)
return search_child_result;
}
return search_child_result;
}