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

бинарные деревья - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить номер первого из столбцов матрицы, содержащих хотя бы один нулевой элемент http://www.cyberforum.ru/cpp-beginners/thread370474.html
Задача с двумерным массивом на C (не C++). Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. Если кто знает, помогите, пожалуйста!
C++ Динамическое выделение памяти в dll Читая Рихтера наткнулся вот на такое замечание:NOTE: Важно понимать, что единое адресное пространство состоит из одного исполняемого модуля и нескольких DLL-модулей. Одни из них могут быть скомпонованы со статически подключаемой библиотекой С/С++, другие — с DLL-версией той же библиотеки, а третьи (написанные нс на С/С++) вообще ею не пользуются Многие разработчики допускают ошибку, забывая,... http://www.cyberforum.ru/cpp-beginners/thread370440.html
C++ Транспонирование матрицы
int _tmain(int argc, _TCHAR* argv) { const int n=5; int a; srand(GetTickCount()); for (int i=0; i < n; i++) for (int j=0; j < n; j++) a=rand()%10; for (int i=0;i<n;i++) {
C++ Перегрузка оператора ==, в классе Матрица
#ifndef MATRIX_H #define MATRIX_H template <class T> class Matrix { public: Matrix(int Rows, int Cols); ~Matrix(); int RowsCount()const;
C++ Проблема с вводом текста. http://www.cyberforum.ru/cpp-beginners/thread370430.html
Привет всем!!! извините конечно, за столь простой вопрос.. забыл и никак вспомнить не могу, как в Объект инспекторе выставить значения текста в кнопке не по центру как по умолчания выравнивается, а по длине кнопки.. Заранее благодарю..
C++ Какие есть библиотеки для работы с MYSQL Всем привет. Я ищу простую (С++) библиотеку для работы с MYSQL. Программа консольная, среда Visual Studio 9-10 Сурс из официального сайта мускула, буст и ACE не вариант. Заранее благодарю.:drink: подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
22.10.2011, 00:53     бинарные деревья
Вот у меня есть программа, которая создает бинарное дерево из массива целых чисел.
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
#include <iostream>
#include <conio.h>
using namespace std;
 
struct  bin_tree
{
   int value;
   bin_tree *left, *right;
}*pHead = NULL; // ГіГЄГ*Г§Г*òåëü Г*Г* âåðøèГ*Гі Г°Г*ГўГҐГ* Г*óëþ
 
// äîáГ*âëåГ*ГЁГҐ óçëГ* äåðåâГ*
void add_node(bin_tree* tree, int value); 
// ïðîâåðêГ* Г*Г* "ïóñòîòó" äåðåâГ*, åñëè ГіГЄГ*Г§Г*òåëü Г*Г* âåðøèГ*Гі Г°Г*ГўГҐГ* Г*óëþ, ñîçäГ*ГҐГІ óçåë
void add_bin_tree(int value);
//ÐåêóðñèâГ*Г® Г°Г*Г±ГЇГҐГ·Г*òûâГ*ГҐГ¬ ГЅГІГ® äåðåâî îò ìåГ*ГјГёГҐГЈГ® ýëåìåГ*ГІГ* ГЄ áîëüøåìó
void print(bin_tree* tree, int level);
 
int main()
{
    int mass[] = {10, 12, 19, 92, 1, 9, 20, 10, 91, 61, 14, 88, 9};
    for (int i = 0; i < sizeof(mass) / sizeof(int); i++)
        add_bin_tree(mass[i]);
    print(pHead, 0);
    //cout<< pHead->value<< " "<< pHead->left->value<< " "<< pHead->right->value<< " ";
    getch();
    return 0;
}
 
void add_node(bin_tree* tree, int value) // äîáГ*âëåГ*ГЁГҐ ГЄГ®Г*êðåòГ*îãî óçëГ* äåðåâГ*
{
    if(value < tree->value)
    { 
        if(tree->left != NULL) // åñëè Г§Г*Г*Г·ГҐГ*ГЁГҐ ìåГ*ГјГёГҐ, äâèãГ*åìñÿ ГЇГ® "ëåâîé ГўГҐГІГЄГҐ"
            add_node(tree->left, value);
        else
        {  
            tree->left = new bin_tree;
            tree->left->value = value;
            tree->left->left = NULL;
            tree->left->right = NULL;
        }
    }
 
    if(value > tree->value) // ГЁГ*Г*Г·ГҐ äâèãГ*åìñÿ ГЇГ® ГЇГ°Г*âîé 
    { 
        if(tree->right != NULL)
            add_node(tree->right, value);
        else
        {
            tree->right = new bin_tree;
            tree->right->value = value;
            tree->right->left=NULL;
            tree->right->right=NULL;
        }
    }
 
    if(value == tree->value)                
        cout<< value<< " is already in tree"<< endl;
}
 
void add_bin_tree(int value)
{
    if(pHead == NULL) // åñëè äåðåâî ïóñòîå - ñîçäГ*äèì ïåðâûé óçåë
    {
       pHead = new bin_tree;
       pHead->value = value;
       pHead->left = NULL;
       pHead->right = NULL;
    }
    else
        add_node(pHead, value); // åñëè Гў âåðøèГ*ГҐ óæå Г·ГІГ®-ГІГ® ГҐГ±ГІГј - äîáГ*âëÿåì ñëåâГ* èëè Г±ГЇГ°Г*ГўГ* 
}
 
void print(bin_tree* tree, int level)
{      
    if (tree->left != NULL) 
        print(tree->left, level + 1);
    for (int i = 0; i < level; i++)
         cout<< " ";
    cout<< tree->value<< endl;
    if (tree->right != NULL) 
       print(tree->right, level + 1);
}
2 вопроса:
1. Как можно сделать так, чтобы бинарное дерево создавалось с как можно меньшим количеством ярусов? Впринципе вот что пока на уме: отсортировать массив, взять за вершину дерева число, стоящее под индексом, равным размерности массива/2 либо (размерности массива/2 + 0,5). Но как тогда поступать, если нужно добавить новый элемент? Использовать вектор, или вобще все это изврат?
2. Хотелось бы создать функцию печати, чтобы видно было саму структуру дерева, но никаких идей на уме.

В интернете ничего дельного не нашел.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru