#include <iostream>
using namespace std;
struct Node {
int key;
Node* left;
Node* right;
Node(int k) : key(k), left(nullptr), right(nullptr) {}
};
Node* insert(Node* root, int key) {
if (!root) return new Node(key);
if (key < root->key) root->left = insert(root->left, key);
else if (key > root->key) root->right = insert(root->right, key);
return root;
}
Node* searchRecursive(Node* root, int target) {
if (!root || root->key == target) return root;
return target < root->key ? searchRecursive(root->left, target) : searchRecursive(root->right, target);
}
Node* searchIterative(Node* root, int target) {
Node* cur = root;
while (cur) {
if (cur->key == target) return cur;
cur = target < cur->key ? cur->left : cur->right;
}
return nullptr;
}
int main() {
Node* root = nullptr;
int num;
cout << "Введите элементы дерева (0 для завершения): ";
while (cin >> num && num != 0) {
root = insert(root, num);
}
int target;
cout << "Введите число для поиска: ";
cin >> target;
cout << (searchRecursive(root, target) ? "Recursive: Found" : "Recursive: Not found") << endl;
cout << (searchIterative(root, target) ? "Iterative: Found" : "Iterative: Not found") << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewogICAgaW50IGtleTsKICAgIE5vZGUqIGxlZnQ7CiAgICBOb2RlKiByaWdodDsKICAgIE5vZGUoaW50IGspIDoga2V5KGspLCBsZWZ0KG51bGxwdHIpLCByaWdodChudWxscHRyKSB7fQp9OwoKTm9kZSogaW5zZXJ0KE5vZGUqIHJvb3QsIGludCBrZXkpIHsKICAgIGlmICghcm9vdCkgcmV0dXJuIG5ldyBOb2RlKGtleSk7CiAgICBpZiAoa2V5IDwgcm9vdC0+a2V5KSByb290LT5sZWZ0ID0gaW5zZXJ0KHJvb3QtPmxlZnQsIGtleSk7CiAgICBlbHNlIGlmIChrZXkgPiByb290LT5rZXkpIHJvb3QtPnJpZ2h0ID0gaW5zZXJ0KHJvb3QtPnJpZ2h0LCBrZXkpOwogICAgcmV0dXJuIHJvb3Q7Cn0KCk5vZGUqIHNlYXJjaFJlY3Vyc2l2ZShOb2RlKiByb290LCBpbnQgdGFyZ2V0KSB7CiAgICBpZiAoIXJvb3QgfHwgcm9vdC0+a2V5ID09IHRhcmdldCkgcmV0dXJuIHJvb3Q7CiAgICByZXR1cm4gdGFyZ2V0IDwgcm9vdC0+a2V5ID8gc2VhcmNoUmVjdXJzaXZlKHJvb3QtPmxlZnQsIHRhcmdldCkgOiBzZWFyY2hSZWN1cnNpdmUocm9vdC0+cmlnaHQsIHRhcmdldCk7Cn0KCk5vZGUqIHNlYXJjaEl0ZXJhdGl2ZShOb2RlKiByb290LCBpbnQgdGFyZ2V0KSB7CiAgICBOb2RlKiBjdXIgPSByb290OwogICAgd2hpbGUgKGN1cikgewogICAgICAgIGlmIChjdXItPmtleSA9PSB0YXJnZXQpIHJldHVybiBjdXI7CiAgICAgICAgY3VyID0gdGFyZ2V0IDwgY3VyLT5rZXkgPyBjdXItPmxlZnQgOiBjdXItPnJpZ2h0OwogICAgfQogICAgcmV0dXJuIG51bGxwdHI7Cn0KCmludCBtYWluKCkgewogICAgTm9kZSogcm9vdCA9IG51bGxwdHI7CiAgICBpbnQgbnVtOwogICAgCiAgICBjb3V0IDw8ICLQktCy0LXQtNC40YLQtSDRjdC70LXQvNC10L3RgtGLINC00LXRgNC10LLQsCAoMCDQtNC70Y8g0LfQsNCy0LXRgNGI0LXQvdC40Y8pOiAiOwogICAgd2hpbGUgKGNpbiA+PiBudW0gJiYgbnVtICE9IDApIHsKICAgICAgICByb290ID0gaW5zZXJ0KHJvb3QsIG51bSk7CiAgICB9CgogICAgaW50IHRhcmdldDsKICAgIGNvdXQgPDwgItCS0LLQtdC00LjRgtC1INGH0LjRgdC70L4g0LTQu9GPINC/0L7QuNGB0LrQsDogIjsKICAgIGNpbiA+PiB0YXJnZXQ7CgogICAgY291dCA8PCAoc2VhcmNoUmVjdXJzaXZlKHJvb3QsIHRhcmdldCkgPyAiUmVjdXJzaXZlOiBGb3VuZCIgOiAiUmVjdXJzaXZlOiBOb3QgZm91bmQiKSA8PCBlbmRsOwogICAgY291dCA8PCAoc2VhcmNoSXRlcmF0aXZlKHJvb3QsIHRhcmdldCkgPyAiSXRlcmF0aXZlOiBGb3VuZCIgOiAiSXRlcmF0aXZlOiBOb3QgZm91bmQiKSA8PCBlbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQ==