【发布时间】:2020-12-15 20:01:30
【问题描述】:
我正在学习 C 中的二叉树,我编写了一个函数来搜索我的树,它是一棵字符串树。但是,它可以工作,如果字符串不在树中,它会出现故障,我正在努力弄清楚如何对其进行错误检查。我想知道是否有任何搜索树的最佳实践。
tnode *search(tnode *p, char *w)
{
if (p->word == NULL || strcmp(w, p->word) == 0)
return p;
else if (strcmp(w, p->word) < 0)
return search(p->left, w);
else
return search(p->right, w);
}
我已经改变了这个函数,但只要它返回NULL,它就会出错。我能想到的最好的解决方案是让它返回一个int 或bool 或char *,这样我就不必处理返回一个NULL 结构。
有没有办法让它与这个函数一起工作,还是让它不返回一个结构更好?
【问题讨论】:
-
什么是
p->left或p->right是NULL?这可能意味着该值不在树中。或者检查p本身是否为NULL。 -
当有简单的迭代解决方案时,最好不要使用递归函数。只要
p不为空,如果p->word匹配,则返回p,否则根据比较将p设置为p->left或p->right,并重复。循环结束后,返回NULL。
标签: c search data-structures struct binary-tree