如何解决搜索二叉树的一些最佳实践是什么?
我正在学习C语言中的二进制树,并且编写了一个函数来搜索我的树,该树是字符串树。它可以工作,但是,如果字符串不在树中,则会出现段错误,并且我正在努力找出如何对它进行错误检查。我想知道是否有搜索树木的最佳实践。
export { default } from "./Child"
我已经对该函数进行了一堆更改,但是只要它返回import React from "react"
import Child from "./Children"
export default class Parent extends React.Component {
constructor(props) {
super(props)
}
render() {
return <Child />
}
}
就会出错。我能想到的最好的解决方案是让它返回import Parent from "../Parent"
jest.mock("../Children")
describe("<Parent/>",() => {
let wrapper
let props = ...
describe("render",() => {
it("renders",() => {
wrapper = mount(<Parent props={props} />)
expect(wrapper).toMatchSnapshot()
})
})
或import React from "react"
export default class Child extends React.Component {
render() {
return <div>abc</div>
}
}
或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
结构。 / p>
有没有办法使它与该功能一起使用,还是最好不要让它返回结构?
解决方法
并非每个节点都会有一个左孩子和一个右孩子。有些人将一无所有,有些则将一无所有。这样,如果要搜索的值不在树中,则代码最终将调用search(NULL,w)
。这是未处理的。
可以进行其他改进:
- 有人可能想尝试搜索一棵空树(
p == NULL
),因此应进行检查。我们将利用相同的检查来解决主要问题。 - 让节点的值(
NULL
带有p->word
是没有意义的,因此没有必要进行检查。 - 搜索
NULL
也没有意义。我们也可以避免检查。 - 我们避免两次对
strcmp
进行相同的调用。 - 让我们将字符串标记为常量。
tnode *search(tnode *p,const char *w) {
if (p == NULL)
return NULL;
int cmp = strcmp(w,p->word);
if (cmp < 0) return search(p->left,w);
else if (cmp > 0) return search(p->right,w);
else return p;
}
最后,没有理由在这里使用递归。
tnode *search(tnode *p,const char *w) {
while (p != NULL) {
int cmp = strcmp(w,p->word);
if (cmp < 0) p = p->left;
else if (cmp > 0) p = p->right;
else return p;
}
return NULL;
}
,
我想说的是 p 等于Null缺失的警卫。
tnode*
search(tnode *p,char *w)
{
if(p == NULL || w == NULL) return NULL;
if (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);
}
然后,调用函数必须检查 search()是否返回Null(未找到)或指针(节点)。
出现分段错误的原因是,如果键不在树中,则使用Null调用search()。 search()要做的第一件事是使用 p-> word 检索单词,但是p不是导致异常的有效地址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。