現在、特定の値が範囲内にあるかどうかを確認するために、バイナリ ツリーをトラバースしようとしています。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
しかし他には何もありません。
誰かが擬似コードまたはスクリプトを介して何らかの方向性を提供しますか? 私は自分でそれを理解したいので、コードを提供する必要はありません。ありがとう。