我在编写代码时无法确定我的树中是否存在某些数据,这是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;
}
答案 0 :(得分:1)
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);
}
一旦你递归检查了左右树,你就完成了。