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

Найти всех двойников в данном целочисленном бинарном дереве - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генерация случайного числа каждую секунду http://www.cyberforum.ru/cpp-beginners/thread985695.html
Нужно каждую секунду генерировать случайное число. Ниже мой код, который выполняет задачу, но функция слип останавливает весь процесс и в дальнейшем может мешать (как например функция delay() в Ардуино). Есть ли еще какой-нибудь способ написать программу без ипользования Sleep() ? int x; for(int i=1;i<=5;i++){ x = rand() % 10; cout<< i <<" - "<< x <<endl; Sleep(1000); ...
C++ Формула подсчета количества итераций цикла for Доброго времени суток Помогите ответом/советом/уч. материалом Пусть, for( int i = 1; i <= 10; i++ ) ... имеем 10 итераций цикла for( int i = 11; i <= 17; i += 2 ) ... имеем 4 итерации цикла http://www.cyberforum.ru/cpp-beginners/thread985670.html
C++ Считать из файла определенную инфу в класс
Приветствую всех. Задача такая: Есть txt файл с инфой: 127 Киев-Львов 100 300 120 Москва-Киев 130 450 103 Будапешт-Москва 70 500 101 Донецк-Лисабон 35 430 Есть класс: class kassa {
C++ Получить из одной матрицы другую исходя из графической маски
Помогите разобраться с задачей! Сижу уже который день, никак не могу представить что тут к чему... Дана действительная матрица , i, j=1, ..., n. Получить действительную матрицу , i, j=1, ..., n, элемент bij которой равен сумме элементов данной матрицы, расположенных в области, определяемой индексами i,j так, как показано на рисунке ( область залита).
C++ Перегрузить функцию sub_array нахождения разности двух массивов и матриц http://www.cyberforum.ru/cpp-beginners/thread985622.html
Привет всем! Столкнулся со сложностями....Помогите сделать лабу! Задание: Перегрузить функцию sub_array нахождения разности двух массивов и матриц.
C++ Алгоритм удаления элемента из массива Помогите написать код:( Условие задачи таково: Заменить максимальный элемент из первых четырех его абсолютным значением, если они все отрицательны, иначе удалить только положительные элементы. подробнее

Показать сообщение отдельно
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265

Найти всех двойников в данном целочисленном бинарном дереве - C++

23.10.2013, 15:56. Просмотров 1544. Ответов 18
Метки (Все метки)

Здравствуйте,нужна помощь в задаче:назовем пару различных вершин дерева двойниками,если их значения и уровни совпадают.Найти всех двойников в данном целочисленном бинарном дереве.
Как сделать ввод с клавиатуры?и как реализовать поиск двойников,если в моем коде не может быть одинаковых значений?
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
//Программа формирует дерево из массива целых чисел и выводит его на экран
//root - корень дерева
#include <iostream>
#include <conio.h>
using namespace std;
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);            //вывод дерева на экран
        getch();
        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->right,level+1);          //Перемещение по правым поддеревьям     
                for(int i=0;i<level;i++)cout<<"   ";
                cout<<p->d<<'\n';                      //вывод значений дерева
                  print_tree(p->left,level+1);           //Перемещение по левым поддеревьям
                
     }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru