Создать дерево, найти его самую короткую ветвь и вывести все ее значения

249
09 декабря 2017, 08:32

Всем доброго времени суток.

Я снова к уважаемым знатокам языка C++ с вопросом:

Задание: Необходимо создать некое дерево, найти его самую короткую ветку и вывести все её значения.

Если честно, есть созданное дерево, но что-то оно мне не сильно нравится. Да и не уверен я, что это именно дерево создалось, а не список, или вообще не пойми что. Да и с рандомайзером как-то не срослось.

Потому буду очень благодарен вам, если подсобите нерадивому студенту.

#include <iostream>
#include <ctime>
using namespace std;

struct Node 
{
   int Data; 
   Node *left, *right; 
};
void show(Node *&Tree) 
{
    if (Tree != NULL) 
    {
       show(Tree -> left); 
       cout << Tree -> Data << endl; 
       show(Tree -> right); 
    }
}
//Очистка памяти
void del(Node *&Tree)
{
   if (Tree != NULL) 
    {
       del(Tree -> left); 
       del(Tree -> right); 
       delete Tree; 
       Tree = NULL; 
    }
}
//Фукция добавления звена в дерево
void add_node(int Data, Node *&MyTree) 
{
    if (NULL == MyTree)  
    {
        MyTree = new Node; 
        MyTree -> Data = Data; 
        MyTree -> left = MyTree -> right = NULL; 
    }
                   if (Data < MyTree -> Data)   
                      {
                          if (MyTree -> left != NULL) 
                              add_node(Data, MyTree -> left); 
                          else 
                          {
                              MyTree -> left = new Node;  
                              MyTree -> left -> left = MyTree -> left -> right = NULL; 
                              MyTree -> left -> Data = Data; 
                          }
                      }
                    if (Data > MyTree -> Data)   
                      {
                          if (MyTree -> right != NULL) 
                              add_node(Data, MyTree -> right); 
                          else 
                          {
                              MyTree -> right = new Node;  
                              MyTree -> right -> left = MyTree -> right -> right = NULL; 
                              MyTree -> right -> Data = Data; 
                          }
                      }
}
int main()
{
    Node *Tree = NULL;  
        for (int i = 10; i > 0; i--) 
            add_node(i, Tree); 
    show(Tree); 
    cout << '\n';
    del(Tree);
}
READ ALSO
Задача про рыцарей и оруженосцев [требует правки]

Задача про рыцарей и оруженосцев [требует правки]

Суть задачи заключается в следующем:

253
Определить угол наклона комнаты

Определить угол наклона комнаты

Нужно изменить функцию user_loop() чтобы определить угол наклона комнатыВ комнате криволинейная поверхность

299
Логика DirectShow при работе с веб - камерой

Логика DirectShow при работе с веб - камерой

Думаю освоить DirectShow, так как помимо вебки далее придётся работать со звуком, а DS, как я понял, универсальное и актуальное на данный момент...

254
Произвольная функция в качестве слота в QObject::connect()

Произвольная функция в качестве слота в QObject::connect()

В Qt существует так называемый QGamepadManager Class который отвечает за подключение джойстика и получения с него сигналов при нажатии на кнопку или...

265