Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Бинарное дерево.Инициализация,поиск элемента


Автор: Laser 24.12.2009, 18:38
Помогите пожалуйста с заданием:
"Определить, входит ли элемент Е в дерево Т" больше ничего не сказано. Как  я понял, нужно задать дерево допустим целых чисел, заполненное любым способом (возможно рандомом), с клавиатуры вводится элемент, скажем "2" и прога ищет его. Есть такой - отлично, появляется сообщение, что такой элемент присутствует, нету - ну и нету, выдаётся соответствующий текст... Алгоритм понятен, но как это написать на С++ - нет. Зарание спасибо!

Автор: t_gran 25.12.2009, 03:48
Код

#include <iostream>

using namespace std;

struct TTree
{
   int key;
   TTree *left;
   TTree *right;
};
//----------------------------------------------//
TTree *Insert (TTree **theTree, int theKey)
{
   TTree **node= theTree;
   while (*node && theKey != (*node)->key)
      if (theKey < (*node)->key)
         node= &((*node)->left);
      else
         node= &((*node)->right);
   if (!(*node))
   {
      *node= new TTree;
      (*node)->key= theKey;
      (*node)->right= (*node)->left= NULL;
   }
   return *theTree;
}
//----------------------------------------------//
TTree *Find (TTree *theTree, int theKey)
{
   if (!theTree)
      return NULL;
   else if (theTree->key < theKey)
      return Find(theTree->right, theKey);
   else if (theTree->key > theKey)
      return Find(theTree->left, theKey);
   else
      return theTree;
}
//----------------------------------------------//
void Print(TTree *theTree)
{
   if (theTree)
   {
      cout << theTree->key << " ";
      Print(theTree->left);
      Print(theTree->right);
   }
}
//----------------------------------------------//

int main (int argc, char **argv)
{
   TTree *tree= NULL;
   for (int i= 0; i < 10; ++i)
      Insert(&tree, rand()%50);
   Print(tree);
   int key;
   cout << endl << "Key: ";
   cin >> key;
   if (Find(tree, key))
      cout << "Find" << endl;
   else
      cout << "Not find" << endl;
   return 0;
}

Автор: Laser 25.12.2009, 20:52
Спасибо! Всё работает!!! Только добавил в мейне getch(); и поключил conio.h

 smile 

Автор: Rodman 25.12.2009, 21:24

M
Rodman
Модератор: Название темы должно содержать язык написания!

Автор: Laser 28.12.2009, 00:20
с радостью дописал бы, но как???? я не могу редактировать...

Автор: Laser 8.1.2010, 21:32
t_gran, можешь написать что делает каждая строка в функции добавления TTree *Insert (TTree **theTree, int theKey) и поиска TTree *Find (TTree *theTree, int theKey)! Извиняюсь за нубовский вопрос,  но я только учусь.. )) А ещё особенно интересует указатель на указатель. А как будет выглядеть код, если дерево красно-чёрное??? В чем разница? ЗАРАНИЕ СПАСИБО!!!

Автор: zim22 8.1.2010, 21:37
Цитата(Laser @  8.1.2010,  20:32 Найти цитируемый пост)
 А как будет выглядеть код, если дерево красно-чёрное???

будет выглядеть сложней

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)