Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2012, 13:29   #1
Godfather07
 
Регистрация: 14.02.2012
Сообщений: 6
По умолчанию Класс Бинарного дерева поиска

Всем доброго время суток! На понедельник надо сделать курсач - класс бинарного дерева поиска. Написал я два класса, первый создаёт узлы в списке, а второй уже само дерево. Вот только не работает нормально поиск....
Прошу помощи у всех.
Вылаживаю код, всем заранее спасибо:

Код:
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;
}
Godfather07 вне форума Ответить с цитированием
Старый 15.06.2012, 13:29   #2
Godfather07
 
Регистрация: 14.02.2012
Сообщений: 6
По умолчанию

Код:
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;
}
Godfather07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распечатка бинарного дерева поиска xMURNx Помощь студентам 0 05.04.2011 22:59
вывод на экран бинарного дерева поиска CodeNOT Общие вопросы C/C++ 0 16.02.2011 23:22