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

бинарное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Двумерный массив.Мах и Мин поменять местами... http://www.cyberforum.ru/cpp-beginners/thread257999.html
Здравствуйте! Написать программу которая создает матрицу a*b. Найти максимальный элемент.И поменять их в массиве местами вывести массив. Помогите доделать и исправить ошибки. Чтото не так с min не пойму....и саму перестановку min b max не понимаю. #include "stdafx.h" #include "iostream" #include <conio.h> #include <stdlib.h>
C++ числовой ряд Найти числовой ряд и некоторое число е. Найти сумму тех членов ряда, модуль которых больше или равен заданному е. Общий член ряда имеет вид {a}_{n}=\frac{n!}{{n}^{n}} http://www.cyberforum.ru/cpp-beginners/thread257983.html
C++ Вычислить функцию y=a+b-(ax)
Вычислить функцию y=a+b-(ax) в точках от XN до XK с шагом измерения X, равным DX. Значения XN, XK, OX, A и B ввести с клавиатуры, все значения функции y отобразить на экране в виде таблицы. При составлении программы использовать цикл while. Именуйте темы осмысленно. Название темы должно максимально полно отражать ее содержание.
числовой ряд C++
Найти числовой ряд и некоторое число е. Найти сумму тех членов ряда, модуль которых больше или равен заданному е. Общий член ряда имеет вид
C++ Вывести слова (важно) http://www.cyberforum.ru/cpp-beginners/thread257979.html
1. Вывести только те слова сообщения, которые содержат не более чем n букв.
C++ Указатель на массив Указатель на массив 1. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах). 2. Даны два массива, упорядоченных по возрастанию: А и B. Сформируйте массив C, состоящий из элементов массивов А и В, упорядоченный... подробнее

Показать сообщение отдельно
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
15.03.2011, 20:46     бинарное дерево
В общем у меня есть двоичное дерево поиска с включением, сделаны функции создания узла\дерева, поиска, и обхода. никак не получается дописать следующее:
1)поменять тип данных на строку символов
2)сделать функцию нахождения в дереве узла с заданным значением ключевого признака
3)сделать функцию определения максимальной глубины дерева
4)сделать функцию определения кол-ва узлов и листьев дерева
5)обход дерева слева направо - левое поддерево,корень, правое поддерево.(у меня как-то не верно работает).
Помогите пожалуйста, горит((

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
//Программа формирует дерево из массива целых чисел и выводит его на экран
//root - корень дерева
 
#include <iostream.h>
 
struct Node{
        int d;         //Данные элемента
        Node *left;    //Ссылка на левое поддерево
        Node *right;   //Ссылка на правое поддерево
};
 
Node *first(int d);                    //Формирование первого элемента
Node *search_insert(Node *root,int d); //Поиск с включением
void print_tree(Node *root,int l);     //Обход дерева
 
//-------------------------------------------
 
int main()
{
        int b[]={10,25,20,6,21,8,1,30}; 
        Node *root=first(b[0]);    //Формируем корень дерева
      //Ищем место куда вставить и вставляем новые элементы
       for(int i=1;i<8;i++)search_insert(root,b[i]); 
        print_tree(root,0);            //вывод дерева на экран
        return 0;
}
 
//--------------------------------------------
 
//Формирование первого элемента
 
Node *first(int d){
Node *pv =new Node;   //Создаём элемент
pv->d=d;              //Присваиваем значение элементу поля
pv->left=0;           //Ссылка на левое поддерево равна NULL
pv->right=0;          //Ссылка на правое поддерево равна NULL
return pv;            //Возвращаем адрес элемента
}
 
//---------------------------------------------
 
 
//Поиск с включением
Node *search_insert(Node *root,int d){
Node*pv=root,*prev;
bool found = false;    //Переменная отвечающая за то что нашли ли элемент или нет
/*Ниже приведён алгоритм поиска короче если нашли такой же элемент то мы его не вставляем в дерево выходим из функции возвратив адрес совпавшего элемента*/
while(pv&&!found){
        prev=pv;                       //получаем адрес элемента от которого будем пускать корни
        if(d==pv->d)found=true;        //совпадение выходим из цикла
        else if(d<pv->d)pv=pv->left;   //Всовываемя в левое поддерево
        else pv=pv->right;             //Всовываемя в правое поддерево 
//Выход из цикла осуществляется, тогда когда нашли свободный адрес : ссылку у дерева : для вставки нового узла */
}
//---------------------------
/*Если совпало значение элемента со значением элемента который хотим вставить то выходим из функции возвращая адрес элемента
с которым совпало */
if(found)return pv;               
//Создание нового узла
Node *pnew =new Node;
pnew->d=d;
pnew->left=0;
pnew->right=0;
if(d<prev->d)
//Присоединение к левому поддереву предка
prev->left=pnew;
else 
//присоединяем к правому поддереву предка
prev->right=pnew;
return pnew;
}
//---------------------------------------
//Обход дерева
void print_tree(Node *p,int level){
        if(p){
                print_tree(p->left,level+1);           //Перемещение по левым поддеревьям
                for(int i=0;i<level;i++)cout<<"   ";
                cout<<p->d<<'\n';                      //вывод значений дерева
              print_tree(p->right,level+1);          //Перемещение по правым поддеревьям        
     }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru