我目前正在尝试遍历二叉树以检查某些值是否在其中。for 循环正在测试从 1 到 50 的所有值,并且将为每个匹配的值返回 true。
这是当前树:
8
/ \
4 38
/ \ / \
3 7 31 39
/ / \ \
1 16 33 45
IntegerData test(0);
for (int i = 0; i < 50; i++) {
test.value = i;
if (bt->member(&test)) {
cout << "member true for " << i << endl;
}
}
现在我必须实现成员函数,并且我有正确的想法,但是它在检查根、根->左和根->右后停止。我觉得好像我使用了正确的递归形式,但我想不是。这是我的代码:
bool BinaryTreeNode::member(Data * data) {
BinaryTreeNode *newNode = new BinaryTreeNode(data);
if (data->compareTo(this->nodeData) == 0) {
return true;
}
else if (data->compareTo(this->left->nodeData) == 0) {
return true;
newNode->member(data);
}
else if (data->compareTo(this->right->nodeData) == 0) {
return true;
newNode->member(data);
}
return false;
}
前面提到的 for 循环打印出来
member true for 8
member true for 4
member true for 38
但没有别的。
有人会通过伪代码或脚本提供一些指导吗?你不必给我代码,因为我想自己解决这个问题。谢谢。