如何解决二叉树中的搜索关键字
我遇到的问题是,对于某些键,我的函数有效,但对于某些键却无效。如果树中没有带有该键的元素,则该函数应返回一个指向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);
}
这是main中函数的调用:
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。