Поиск с барьером в двоичном дереве

#include <iostream>

using namespace std;


struct Tree{
    int value;
    Tree* left;
    Tree* right;
};

Tree* Add(Tree*& a, int elem) {
        if (!a) {
            a = new Tree;
            a->value = elem;
            a->left = nullptr;
            a->right = nullptr;
            return 0;
        }
        else if (elem < a->value) {
            Add(a->left, elem);
        }
        else  {
            Add(a->right, elem);
        }
        return a;
}

Tree* FindParent(Tree*& start,int x, Tree* parent=nullptr) {
  
    if (start == nullptr)
        return NULL;
    if (start->value == x)
        return parent;
    else {
        if (x < start->value)  return FindParent(start->left, x, parent);
        else return FindParent(start->right, x, parent);
    }
}

Tree*& Delete(Tree*& tree,int value) {
    if (tree == NULL)
        return tree;

    if (value == tree->value) {

        Tree* tmp;
        if (tree->right == NULL)
            tmp = tree->left;
        else {

            Tree* ptr = tree->right;
            if (ptr->left == NULL) {
                ptr->left = tree->left;
                tmp = ptr;
            }
            else {

                Tree* pmin = ptr->left;
                while (pmin->left != NULL) {
                    ptr = pmin;
                    pmin = ptr->left;
                }
                ptr->left = pmin->right;
                pmin->left = tree->left;
                pmin->right = tree->right;
                tmp = pmin;
            }
        }

        delete tree;
        return tmp;
    }
    else if (value < tree->value)
       tree->left = Delete(tree->left, value);
    else
        tree->right = Delete(tree->right, value);
    return tree;
}
void printTree(Tree*& a) {
    if (a) {
        cout << a->value<<" ";
        printTree(a->left);
        printTree(a->right);

    }
    else return;
}

bool findTree(Tree* a,int value) {
    int cmp = 0;
        while (a&& value !=a->value) {
                if (value < a->value) a=a->left;
                else a=a->right;  
                cmp++;
        }
        cout << "Количество сравнений: " << cmp << endl;
        return a!=NULL;
}
Tree*& addBarrier(Tree*& start,int stop) {
  
}
Tree*& findBTree(Tree*& start,int value,int stop) {
    int cmp=0;
    if (start->value == stop)
        return start;
    if (start->value == value)
        return start;
    else {
        if (value < start->value)
            start = findBTree(start->left, value, stop);
        else start = findBTree(start->right, value, stop);
    }
}

   
/* Tree* b=new Tree;
    b->value = x;
    int cmp = 0;
    Tree* parent = nullptr;
    Barrier(a,b);
    while (x != b->value) {
        if (x < a->value) a = a->left;
        else a = a->right;
        cmp++;
    }
    if (&a == &b) return false;
    cout << "Количество сравнений: " << cmp << endl;
    return a != NULL;*/
int main()
{
    setlocale(LC_ALL, "Russian");
    int x;
    int n;
    cout << "Введите количество элементов: " << endl;
    cin >> n;
    Tree* tree=NULL;
    cout << "Введите элементы дерева: "<<endl;
    for (int i = 0; i < n; i++) {
        cin >> x;
        Add(tree, x);
    }
    cout << "Элементы дерева: "<<endl;
    printTree(tree);
    cout << endl;
    cout << findTree(tree,5)<<endl<<endl;
    printTree(tree);
    cout << endl;
   cout<<findBTree(tree,5,10);
   // printTree(tree);
    cout << endl;
    Delete(tree,3);
    printTree(tree);

}

Я понял суть поиска с барьером, но не понял,как разместить барьер на нулевых ветках дерева. Че то у меня не получается. Мне нужно написать функцию addBarrier.


Ответы (0 шт):