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

110
30 декабря 2021, 10:40

Нужно проверить есть ли элемент Х в бинарном дереве. Моя функция Find работает рандомно, то находит то не находит (хотя он есть). В чем ошибка?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
using namespace  std;
struct BinaryTree {
  int Data; 
  BinaryTree * Left; 
  BinaryTree * Right; 
};
void Make_BinaryTree(BinaryTree** Node, int n){
  BinaryTree** ptr; 
  srand(time(NULL)*1000);
  while (n > 0) {
    ptr = Node;
    while (*ptr != NULL) {
      if ((double) rand()/RAND_MAX < 0.5)
        ptr = &((*ptr)->Left);
      else ptr = &((*ptr)->Right);
    }
    (*ptr) = new BinaryTree();
    cout << "Введите значение ";
    cin >> (*ptr)->Data;
    n--;
  } 
}
//прямой обход
void PreOrder_BinaryTree(BinaryTree* Node)  {
  if (Node != NULL) {
    printf ("%3ld",Node->Data);PreOrder_BinaryTree(Node->Left);
    PreOrder_BinaryTree(Node->Right);
  } 
}
void Find(BinaryTree* Node, int x) {
  if (Node==NULL) {
    cout<<x<<" - не найден"<<endl;
    return;
  }
  else if (Node->Data==x) {
    cout<<x<<" - найден"<<endl;
    return;
  }
  else if (Node->Data > x)
    Find(Node->Right, x);
  else
    Find(Node->Left, x);
}
void Delete_BinaryTree(BinaryTree* Node) {
  if (Node != NULL) {
    Delete_BinaryTree(Node->Left);
    Delete_BinaryTree(Node->Right);
    delete(Node);
  } 
}
int main() {
  BinaryTree *BTree=NULL;
  Make_BinaryTree(&BTree, 5);
  PreOrder_BinaryTree(BTree); //вывод элементов
  cout<<endl;
  Find(BTree, 5); //вызов поиска
  Delete_BinaryTree(BTree);
return 0;
}
Answer 1

Проблема в функции Make_BinaryTree. Вы сначала определяете ветку, куда будет помещено значение, а потом его вводите. Нужно сначала ввести, а потом на основе введеного значения определить куда его поместить. Также нужно учитывать возможность ввода дубликатов. Функция Find делает предположение, что все значения в дереве отсортированы, чего Make_BinaryTree не обещает.

READ ALSO
Unreal Engine 4 не видит Visual Studio 2019

Unreal Engine 4 не видит Visual Studio 2019

Можно ли его как то указать в настройках движка (как в Unity)?

199
как конвентировать текст в цифровой код?

как конвентировать текст в цифровой код?

Есть ли стандартная библиотека или готовое решение, которая может конвертировать символы например как делает этот сайтhttps://allcalc

191
Запуск с правами администратора

Запуск с правами администратора

Вводные данные: VS2017 запущенный от имени АдминистратораNET Framework 4

100