gpt4 book ai didi

c++ - 二叉搜索树成员函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:10 28 4
gpt4 key购买 nike

我在编写代码来确定某些数据是否存在于我的树中时遇到问题,这是 BinaryTreeNode 类

class BinaryTreeNode {
public:
Data * nodeData;
BinaryTreeNode * left;
BinaryTreeNode * right;

我需要完成的功能是(不能改变这个定义)

bool BinaryTreeNode::member(Data * data) const {

我尝试创建一个像 currentnode = this 这样的变量,并使用 while 循环来检查树的哪一侧向下推进,然后更新 currentnode,但我似乎无法得到那个工作。所以我在想也许它应该通过递归来完成?我试过了,但程序锁定了。

如果有人能指出我正确的方向,那将非常有帮助。

这是我的许多尝试之一(这个尝试递归):

bool BinaryTreeNode::member(Data * data) const {
if(nodeData == NULL) {
return false;
}
else if (nodeData->compareTo(data) == 0) {
return true;
}
while(this != NULL) {
if(nodeData->compareTo(data) == 0) {
return true;
}
else if(nodeData->compareTo(data) == 1) {
return left->member(data);
}
else if(nodeData->compareTo(data) == -1) {
return right->member(data);
}
}

return false;
}

最佳答案

while(this != NULL)

在第一次调用该函数时,this 永远不会更改为 NULL

您可以彻底删除这一行。然后,只需在您的两个分支中检查 NULL

    if(left && nodeData->compareTo(data) == 1) {
return left->member(data);
}
if(right && nodeData->compareTo(data) == -1) {
return right->member(data);
}

一旦你递归地检查了左右树,你就完成了。

关于c++ - 二叉搜索树成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722708/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com