Форум программистов, компьютерный форум CyberForum.ru

Создание дерева и вывод его на экран - C++

Восстановить пароль Регистрация
 
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 15:51     Создание дерева и вывод его на экран #1
Требуется создать бинарное дерево, состоящее из 7 уровней, заполненное рандомными числами. И вывести на экран приблизительно похожим на дерево. Буду благодарен за любую помощь
Я попытался сделать следующим образом:
C++
1
2
3
4
5
6
struct tree //объявляю структуру
{
    int n;
    tree* left;
    tree* right;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
tree *insert(tree **root, int level, int n)  //пишу функцию для вставки числа
{
    tree* item, *parent, *current;
    if(root==0) return 0;
    item=(tree*)malloc(sizeof(tree));
    if(item==0) return 0;
    item->n=n;
    item->left=0;
    item->right=0;
    if(*root==0)
    {
        *root=item;
        return *root;
    }
    current=*root;
    while(current)
    {
        parent=current;
        if(item->n > current->n) current=current->right;
        else current=current->left;
    }
    if(item->n > parent->n) parent->right=item;
    else parent->left=item;
    return *root;
}
C++
1
2
3
4
5
6
7
8
9
void output(tree *root) //совершаю обход дерева
{
    if(root)
    {
        printf("%d\n", root->n);
        if(root->left) output(root->left);
        if(root->right) output(root->right);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 15:53     Создание дерева и вывод его на экран #2
Troll1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Ttree {
 int inf;
 Ttree *left, *right;
};
 
void add (int a, Ttree *&tr){ 
 if (!tr) {
  tr=new Ttree;
  tr->inf=a;
  tr->left=tr->right=NULL; 
 }
 else if (a<tr->inf) add(a,tr->left);
 else if (a>tr->inf) add(a,tr->right);
}
 
void del_tree (Ttree *&tr){ 
 if (tr){ 
  del_tree(tr->left);
  del_tree(tr->right);
  delete tr;
  tr=NULL;
 }
}
C++
1
2
3
4
5
6
7
8
9
void output(Ttree *root) //совершаю обход дерева
{
    if(root)
    {
        printf("%d ", root->inf);
        output(root->left);
        output(root->right);
    }
}
сам не тестил, написал прямо тут
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 15:55  [ТС]     Создание дерева и вывод его на экран #3
Спасибо. Но чем мне это поможет?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 15:56     Создание дерева и вывод его на экран #4
Troll1, А в чём проблема состоит ?
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 16:00  [ТС]     Создание дерева и вывод его на экран #5
Ну смотри: я набросал пару функций, но толком не понимаю, как их соединить в одно целостную программу. Плюс в данном виде (ошибки в функциях) проект не компилируется.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
23.04.2013, 16:08     Создание дерева и вывод его на экран #6
Любимые бинарные деревья.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 16:13     Создание дерева и вывод его на экран #7
Troll1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <stdio.h>
#include <string>
#include <queue>
#include <time.h>
#include <cmath>
 
using namespace std;
 
template <typename E>
class tree{
private:
    struct Ttree {
        E inf;
        Ttree *left, *right;
    };
 
    Ttree * head;
 
    void add (E a, Ttree *&tr){ 
        if (!tr) {
             tr = new Ttree;
             tr->inf = a;
             tr->left = tr->right = NULL; 
        } else if (a<tr->inf) {
            add(a,tr->left);
        } else if (a>tr->inf) {
            add(a,tr->right);
        }
    }
    void del_tree (Ttree *&tr){ 
        if (tr){ 
            del_tree(tr->left);
            del_tree(tr->right);
            delete tr;
            tr = NULL;
        }
    }
    void output(Ttree *root) {
        if (root) {
            cout << root->inf << " ";
            output(root->left);
            output(root->right);
        }
    }
public:
    tree(){
        head = NULL;
    }
    void push(E a){
        add(a, head);
    }
    void delete_tree(){
        del_tree(head);
    }
    void show(){
        output(head);
    }
};
 
int main() {
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    tree<int> lol;
    lol.push(3);
    lol.push(1);
    lol.push(8);
    lol.push(9);
    lol.push(7);
    lol.push(2);
    lol.show();
    return 0;
}
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 16:32  [ТС]     Создание дерева и вывод его на экран #8
Ternsip, Не понял одного момента: зачем создавать файл input, если все выводим через lol.push. Да и кстати, не могли бы Вы разъяснить мне что такое lol.push, ибо я ранее никогда не сталкивался с такой конструкцией
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 16:38     Создание дерева и вывод его на экран
Еще ссылки по теме:

Считывание пикселя и вывод на экран его цвета C++
C++ Вывод дерева на экран
C++ Бинарные деревья, вывод дерева на экран

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 16:38     Создание дерева и вывод его на экран #9
Troll1, Поясняю : Я создал класс - дерево. Этот класс основан на простенькой структурке - узел дерева (Ttree). Так же он включает скрытые методы (нельзя вызывать вне класса) add и del_tree и не скрытые, т.е. доступные для объекта типа tree. Это методы push - пихнуть в дерево элемент со значением a, которое я указал в скобках ( push(значение) ) и show - глубинно выводит всё дерево (dfs можете почитать). Теперь tree - это ваш тип данных и вы можете создавать переменные этого типа, например, как я сделал -- переменная lol, в которую я запихал элементы 3,1,8,... итд.
Yandex
Объявления
23.04.2013, 16:38     Создание дерева и вывод его на экран
Ответ Создать тему
Опции темы

Текущее время: 09:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru