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

Массив из чисел представить в виде упорядоченного бинарного дерева - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Разобрать код по алгоритму http://www.cyberforum.ru/cpp-beginners/thread1217491.html
Тексты надо переписывать в сообщение! сделали контрольную и защитить не не могу. помогите разобрать что значит код, пожалуйста. собственно вопрос в том что за 4 состояния у кейс
C++ Файл, переход на следующую строку Не могу понять как записать в следующую строку F.open(OpenDialog1->FileName.c_str(),ios::app); F<<'1' F<<'2' F<<'3' в итоге в файле будет строка 123, а как записывать, чтобы числа были в разных строках то есть: 1 2 3 http://www.cyberforum.ru/cpp-beginners/thread1217481.html
C++ Какие значения будут у ячеек массива после выполнения следующего кода?
Немного запутался поэтому хочу задать вопрос у специалистов. Какие значения будут у ячеек массива после выполнения следующего кода? Заранее благодарен. int mss = {6}; int *p1=mss, *p2=&mss ; p1=p2; mss = 1<=mss || *p1<=mss ) *p1+1-mss : 8 *mss ; mss = 2+ (*p2) +9; *p1=(*2p-mss ) %6;
Отличия пространства имен от структуры C++
Есть ли разница между пространством имен и структурой? По-моему почти одно и то же
C++ Как много шахматных слонов можно расставить, чтобы они не угрожали друг другу? http://www.cyberforum.ru/cpp-beginners/thread1217445.html
Какое наибольшее число слонов можно расставить на шахматной доске так, чтобы никакие из них не угрожали друг другу. Задачу решить численным методом. Заранее благодарю.
C++ C++ Оболочка для теста Помогите сделать программу. Надо срочно сдать курсовую. С подсчётом результата в каждом тесте. Пожалуйста помогите, очень надо подробнее

Показать сообщение отдельно
v1perokk
Сообщений: n/a
26.06.2014, 13:54     Массив из чисел представить в виде упорядоченного бинарного дерева
Помогите пожалуйста.Массив из чисел представить в виде упорядоченного бинарного дерева. Вывести на экран дерево и все его ветви, исходящие из слоя с заданным ключом. Сделать сделал, но дерево выводится очень криво и только в Visual Studio... Если возможно, то помогите правильно и красиво его вывести. А кто умеет сделать это же в C++ Builder'е. Заранее БОЛЬШОЕ СПАСИБО!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "sequnce.h"
#include <conio.h>
int main(){
    //sequnce first(int(15));
    //first.serch_int(1);
    char exit;
    do{
        std::string input_str;
        std::cout << "Enter numeric number" << std::endl;
        int num;
        std::cin >> num;
        sequnce first(num);
        system("cls");
        std::cout << "Enter number" << std::endl << std::endl << std::endl << std::endl;
        int number;
        std::cin >> number;
        system("cls");
        first.serch_int(number);
        exit = _getch();
        system("cls");
    } while (exit != 'ESC');
    _getch();
}
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "tree.h"
 
 
tree::tree()
{
    root = NULL;
    first = true;
    size = 0;
    hight_temp_is = true;
    hight_temp = 0;
    hight = 0;
    
}
 
 
tree::~tree()
{
}
 
void tree::add(int& d , node** uz){
    if (*uz == NULL){
        *uz = new node;
        (*uz)->data = d;
        (*uz)->num = 1;
        (*uz)->left = (*uz)->right = NULL;
        (*uz)->NUM_pod_this = 0;
        size++;
        if (hight_temp_is)(*uz)->h = hight_temp + 1;
        hight_temp_is = false;
    }
    else{
        if (d > (*uz)->data)
        {
            hight_temp = (*uz)->h;
            hight_temp_is = true;
            add(d, &((*uz)->right)); //Если аргумент а больше чем текущий элемент, кладем его вправо
        }
        else if (d < (*uz)->data)//Если меньше кладем его влево
        {
            hight_temp = (*uz)->h + 1;
            hight_temp_is = true;
            add(d, &((*uz)->left));
        }
        else if (d == (*uz)->data)// Если равен кладем сюдаже
        {
            (*uz)->num++;
            size++;
            hight_temp_is = false;
        }
    }
 
    
}
 
void tree::add(int& d){
    tree::add(d, &root);
}
 
void tree::print(node *q)
{
    /*if (t == NULL) return 0; //Если дерево пустое, то отображать нечего, выходим
    else //Иначе
    {
        
        for (int h = 0; h < (t->NUM_pod_this / 2) + 1; h++)std::cout << '\t';
        int left = print(t->left);
        int right = print(t->right);
        std::cout << t->data; //И показываем элемент
    }
    return true;*/
     //С помощью рекурсии посещаем правое поддерево
 
    long i;
    if (q)
    {
        print(q->right);
        for (i = 0; i < q->NUM_pod_this*2; i++)
            printf(" ");
        printf("%d\n", q->data);
        print(q->left);
    }
}
 
 
std::ostream &operator<<(std::ostream& os, std::list<std::string, std::allocator<std::string>>& l){
    for (auto k : l){
        os << k << ' ';
    }os << std::endl;
    return os;
}
 
node* tree::serch(int& str, node** t){
    if ((*t) != NULL){
        if (str == ((*t)->data )){
            return *t;
        }
        else if (str > ((*t)->data)){
            serch(str, &(*t)->right);
        }
        else if (str < ((*t)->data)){
            serch(str, &(*t)->left);
        }
    }
    else return NULL;
}
void tree::serch(int& str){
    node* temp = serch(str, &root);
    if (temp != NULL){
        node* left = temp;
        node* right = temp;
        std::cout << "Left branch" << std::endl;
        while (left->left != NULL){
            left = left->left;
            std::cout << "Numeric " << left->data << "  ";
            std::cout << "numder " << left->num << std::endl;
        }
        std::cout << "Right branch" << std::endl;
        while (right->right != NULL){
            right = right->right;
            std::cout << "Numeric " << right->data << "  ";
            std::cout << "numder " << right->num << std::endl;
        }
    }
    if (temp == NULL){ std::cout << "Could not find num" << std::endl; }
}
 
int tree::analiz(node** uz){
    if ((*uz) == NULL) return 0;
    else{
        int max = maximum(analiz(&(*uz)->left), analiz(&(*uz)->right));
        (*uz)->NUM_pod_this = max;
        return max + 1;
    }
}
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
#include "sequnce.h"
 
 
sequnce::sequnce()
{
}
 
 
sequnce::~sequnce()
{
}
 
sequnce::sequnce(int _size)
{
    size = _size;
    filling_num(size);
    filling_tree();
    tr.analiz(&tr.root);
    //tr.print();
 
    //serch_int(5);
}
 
void sequnce::filling_num(int _size){
    for (int i = 0; i < _size; i++){
        num.push_back(i+1);
    }
    std::random_shuffle(num.begin(), num.end());
}
void sequnce::filling_tree(){
    for (std::vector<int>::iterator i = num.begin(); i != num.end(); i++){
        tr.add(*i);
    }
}
 
void sequnce::serch_int(int d){
    node* temp = tr.serch(d, &tr.root);
    tr.print(temp);
}
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
#pragma once
#include <string>
#include "Node.h"
#include <list>
#include <iostream>
#define node Node<int>
class tree
{
private:
//  node *root;
    bool first;
    int size;
    int hight_temp;
    bool hight_temp_is;
public:
    node *root;
    unsigned int hight;
    tree();
    ~tree();
    void add(int&, node**);
    void add(int&);
    node* serch(int&, node**);
    void serch(int&);
    void tree::print(node *t);
    void print(){ print(root); }
    int analiz(node** uz); 
    int maximum(int a, int b) { return ((a > b) ? (a) : (b)); }
 
    //friend std::ostream &operator<<(std::ostream& os, std::list<int>& l);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include "tree.h"
#include <vector>
#include <algorithm>
#include "Node.h"
class sequnce
{
private:
    std::vector<int> num;
    void filling_num(int);
    void filling_tree();
    int size;
    tree tr;
public:
    sequnce();
    sequnce(int _size);
    ~sequnce();
    void print(int);
    void serch_int(int);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
template <typename T>
class Node
{
private:
    //friend class tree<T>;
public:
    Node<T> *left, *right;
    T data;
    int num;
    int h;
    int NUM_pod_this;
    Node() : left(NULL), right(NULL) ,num(0){}
    ~Node(){
        if (left){ delete left; left = NULL; }
        if (right){ delete right; right = NULL; }
    }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru