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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
#1

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

23.04.2013, 15:51. Просмотров 1195. Ответов 8
Метки нет (Все метки)

Требуется создать бинарное дерево, состоящее из 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);
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 15:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание дерева и вывод его на экран (C++):

Запись массива в виде бинарного дерева и вывод его на экран! - C++
Задача: Зарандомить массив с 30 ел... от -100 до 100, создать бинарное дерево использую дан. массив, Вывод массива и дерева на экран.. ...

Вывод бинарного дерева на экран в виде "дерева" - C++
основная задача: подсчет количества листьев. проблема: при просмотре хочу выводить бин. дерево, в красивом виде, возможно использование...

Вывод дерева на экран - C++
#include <iostream> using std::cout; using std::endl; template<typename T> class avltree { public: struct node...

Вывод дерева на экран - C++
Создаю бинарное дерево, заполняю его случайными числами. Хотелось бы все это дело аккуратно вывести на экран:) А также подсчитать сумму...

Вывод на экран n-мерного дерева. - C++
Есть н мерное дерево. Надо вывести в окне консольки. Структура такая: struct Tree{ int number; // номер int level; //...

Бинарные деревья, вывод дерева на экран - C++
Создание бинарное дерево, помогите с выводом дерева на экран #include <iostream> #include <cstdlib> using namespace std; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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);
    }
}
сам не тестил, написал прямо тут
0
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 15:55  [ТС] #3
Спасибо. Но чем мне это поможет?
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 15:56 #4
Troll1, А в чём проблема состоит ?
0
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 16:00  [ТС] #5
Ну смотри: я набросал пару функций, но толком не понимаю, как их соединить в одно целостную программу. Плюс в данном виде (ошибки в функциях) проект не компилируется.
0
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
23.04.2013, 16:08 #6
Любимые бинарные деревья.
0
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;
}
1
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
23.04.2013, 16:32  [ТС] #8
Ternsip, Не понял одного момента: зачем создавать файл input, если все выводим через lol.push. Да и кстати, не могли бы Вы разъяснить мне что такое lol.push, ибо я ранее никогда не сталкивался с такой конструкцией
0
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,... итд.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 16:38
Привет! Вот еще темы с ответами:

Почему при выборе switch у меня не работает вывод дерева на экран?! - C++
////////////////////////////////////////////////////// // // // Ñîçäàòü ïðîãðàììó äëÿ...

Создание и вывод матрицы на экран - C++
Всем доброго времени суток! Такое вот задание у меня... Мне не ясно как я могу преобразовать функцию под тип дабл или темболее чар? Я...

Считывание текста из файла и вывод его на экран - C++
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с...

Считывание пикселя и вывод на экран его цвета - C++
Подскажите пожалуйста, как это можно реализовать или где про это можно что-то прочитать. Есть 2мерная матррица,которая складывается друг...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.04.2013, 16:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru