Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> НЕ работает поиск в Бинарном дереве, Помогите пожалуйста написать поиск  
:(
    Опции темы
Godfather07
Дата 18.6.2012, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



Код

//Boris kuzevanov

#include <iostream>
using namespace std;
/********************************************************************************/
class Node
{
 private:
    int _value;
    Node* left;
    Node* right;
 public:
    Node(int);
    Node();
    ~Node();
    void SetLeft(Node*);
    void SetRight(Node*);
    void SetValue(int);
    int GetValue();
    Node* GetLeft();
    Node* GetRight();
};
/********************************************************************************/
Node::Node(int value)
{
 _value = value;
 left = NULL;
 right = NULL;
}
/********************************************************************************/
Node::Node(): _value(0), left(NULL), right(NULL){}
/********************************************************************************/
Node::~Node()
{
  if (left == NULL) delete left;
  if (right == NULL)delete right;
}
/********************************************************************************/
void Node::SetLeft(Node* ptr)
{
 left = ptr;
}
/********************************************************************************/
void Node::SetRight(Node* ptr)
{
 right = ptr;
}
/********************************************************************************/
void Node::SetValue(int iValue)
{
 _value = iValue;
}
/********************************************************************************/
int Node::GetValue()
{
 return _value;
}
/********************************************************************************/
Node* Node::GetLeft()
{
 return left;
}
/********************************************************************************/
Node* Node::GetRight()
{
 return right;
}
//////////////////////////////////////////////////////////////////////////////////
class Tree
{
 private:
     Node* head;
 public:
     Tree();
     Tree(int);
     Tree(Node*);
     ~Tree();
     bool Add(Node*, int);
     bool Add(int);
     bool search(int);
     Node* RemoveNode(Node*, int);
     void DestroyTree(Node*);
};
/********************************************************************************/
Tree::Tree():head(NULL){}
/********************************************************************************/
Tree::Tree(int value)
{
 Node* node = new Node(value);
 head = node;
}
/********************************************************************************/
Tree::Tree(Node* node)
{
 head = node;
}
/********************************************************************************/
Tree::~Tree()
{
 DestroyTree(head);
}
/********************************************************************************/
void Tree::DestroyTree(Node* root)
{
 if(root == NULL) return;
 DestroyTree(root->GetLeft());
 DestroyTree(root->GetRight());
 delete root;
}
/********************************************************************************/
bool Tree::Add(Node* node, int value)
{
 if(head == NULL)
 {
  Node* node = new Node(value);
  head = node;
  return true;
 }
 if(value >= node->GetValue())
 {
  if(node->GetRight() != NULL)
    return Add(node->GetRight(), value);
  else
   {
    Node* newNode = new Node(value);
    node->SetRight(newNode);
    return true;
   }
 }
 else
 {
  if(node->GetLeft() != NULL)
    Add(node->GetLeft(), value);
  else
  {
   Node* newNode = new Node(value);
   node->SetLeft(newNode);
   return true;
  }
 }
}
/********************************************************************************/
bool Tree::Add(int value)
{
 if(head == NULL)
 {
  Node* node = new Node(value);
  head = node;
  return true;
 }
 if(value >= head->GetValue())
 {
  if(head->GetRight() != NULL)
    return Add(head->GetRight(), value);
  else
  {
   Node* newNode = new Node(value);
   head->SetRight(newNode);
   return true;
  }
 }
 else
 {
  if(head->GetLeft() != NULL)
    return Add(head->GetLeft(), value);
  else
  {
   Node* newNode = new Node(value);
   head->SetLeft(newNode);
   return true;
  }
 }
}
/********************************************************************************/
bool Tree::search(int ivalue)
{
 if(ivalue == head->GetValue())
 {
  return true;
 }
 else
 {
  return false;
 }
}
/********************************************************************************/
Node* Tree::RemoveNode(Node* root, int x)
{
 Node *t = new Node;
 if(root == NULL)
    return NULL;
 if(x == root->GetValue())
 {
  if(root->GetLeft() == NULL)
  {
   t = root->GetRight();
   delete root;
   return t;
  }
  t = root->GetLeft();
  while (t->GetRight())
  {
   t = t->GetRight();
  }
  t->SetRight(root->GetRight());
  return root->GetLeft();
 }
 if(x < root->GetValue())
    root->SetLeft(RemoveNode(root->GetLeft(), x));
 else
    root->SetRight(RemoveNode(root->GetRight(), x));
 return root;
}
/********************************************************************************/
int main()
{
 Tree *tree = new Tree(110);
 tree->Add(100);
 tree->Add(200);
 tree->Add(50);
 tree->Add(120);
 cout << tree->search(110);
  cout << tree->search(100);
 delete tree;
 return 0;
}
/********************************************************************************/

PM MAIL   Вверх
feodorv
Дата 18.6.2012, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Godfather07 @  18.6.2012,  03:59 Найти цитируемый пост)
НЕ работает поиск в Бинарном дереве


Цитата(Godfather07 @  18.6.2012,  03:59 Найти цитируемый пост)
bool Tree :: search(int ivalue)
{
 if(ivalue == head->GetValue())
 {
  return true;
 }
 else
 {
  return false;
 }
}

Таким образом и не будет работать smile 


Цитата(Godfather07 @  18.6.2012,  03:59 Найти цитируемый пост)
Помогите пожалуйста написать поиск

Ну так у Вас же есть образец вставки нового значения:
Цитата(Godfather07 @  18.6.2012,  03:59 Найти цитируемый пост)
bool Tree::Add(int value)

Только вместо вставки нужно сравнивать значения...


Цитата(Godfather07 @  18.6.2012,  03:59 Найти цитируемый пост)
Node::~Node()
{
  if (left == NULL) delete left;
  if (right == NULL)delete right;
}

 smile 

Это сообщение отредактировал(а) feodorv - 18.6.2012, 11:17


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Godfather07
Дата 18.6.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



Можете с самим кодом помочь?  вэбер просто, в с++ слаб, каркас написал и это хорошо)
Спасибо заранеее
PM MAIL   Вверх
feodorv
Дата 18.6.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Godfather07 @  18.6.2012,  13:02 Найти цитируемый пост)
каркас написал и это хорошо)

А Boris kuzevanov - это Вы?  smile 


Цитата(Godfather07 @  18.6.2012,  13:02 Найти цитируемый пост)
Можете с самим кодом помочь?

Сильно не вдумывался, такое должно помочь:
Код

bool Tree :: search(int ivalue)
{
  Node* node = head;

  while( node != NULL )
  {
    if( ivalue == node->GetValue() ) return true;
    node = (value > node->GetValue()) ? node->GetRight() : node->GetLeft();
  }

  return false;
}



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Godfather07
Дата 18.6.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



Да, Борис - это я) Сейчас закомпилю)

Добавлено через 6 минут и 17 секунд
    Node = (value > node->GetValue()) ? node->GetRight() : node->GetLeft();
тут на ошибку жалуется,.
PM MAIL   Вверх
feodorv
Дата 18.6.2012, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Godfather07 @  18.6.2012,  17:03 Найти цитируемый пост)
тут на ошибку жалуется,. 

На какую?
У Вас Node - с большой буквы, а надо с маленькой...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Godfather07
Дата 18.6.2012, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



    node = (value > node->GetValue()) ? node->GetRight() : node->GetLeft();

Z:\C++\test1\main.cpp|201|error: expected constructor, destructor, or type conversion before '/' token|
PM MAIL   Вверх
feodorv
Дата 18.6.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Ну не знаю. 
Там есть описка: не value, а ivalue.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Godfather07
Дата 19.6.2012, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



Спасибо большое) логику подхватил и сделал за час до сдавчи) проект защитиль, если будет такой как я бедолага, то оставлю своё мыло, пусть напишет и я вышлю, думаю кому-то понадобится деревце))
[email protected]
PM MAIL   Вверх
borisbn
Дата 19.6.2012, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Godfather07 @  19.6.2012,  02:59 Найти цитируемый пост)
если будет такой как я бедолага, то оставлю своё мыло

Послушайте, тёзка  smile выложите лучше код сюда.
user posted image
если этот "бедолага" умеет пользоваться поиском (хоть гугл, хоть убогим местным), то он сразу найдёт то, что искал, если нет - ему никакой код, никакой гугл, никакой Ваш e-mail не поможет)))

Это сообщение отредактировал(а) borisbn - 19.6.2012, 20:58


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.