Форум программистов, компьютерный форум 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++ Алгоритм удаления элемента из массива Помогите написать код:( Условие задачи таково: Заменить максимальный элемент из первых четырех его абсолютным значением, если они все отрицательны, иначе удалить только положительные элементы. подробнее

Показать сообщение отдельно
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
09.12.2013, 21:20     Найти всех двойников в данном целочисленном бинарном дереве
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
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <clocale>
using namespace std;
 
struct node
{
    int d;//элементы дерева
    node *l, *r, *p;//Левая и Правая часть дерева
};
 
struct leaf
{
    node* nd;
    int level;
};
 
leaf* plf = NULL;
 
//создание поддерева
void MakeSubTrees(node *leaf)
{
    node *Node;int key;
    cout<<"введите текущий узел"<<endl;
    cin>>leaf->d;
    cout<<leaf->d<<" имеет левое поддерево?"<<endl;
    cin>>key;
    if (key==1)
    {
        (Node)=new node;
        Node->p = leaf;
        leaf->l=Node;
        MakeSubTrees(Node);
    }
    else
        leaf->l=NULL;
    cout<<leaf->d<<" имеет правое поддерево?"<<endl;
    cin>>key;
    if (key==1)
    {
        (Node)=new node;
        Node->p = leaf;
        leaf->r=Node;
        MakeSubTrees(Node);
    }
    else
        leaf->r=NULL;
}
 
//создание дерева
void MakeTree(node **Top)
{
    (*Top)=new node;
    (*Top)->p = NULL;
    MakeSubTrees(*Top);
 
    printf("\n");
}
 
void WayUpDown(node *Top)
{ 
    if (Top==NULL)
        return;
    
    static int n = 0;
    int level = 0; node* tmp = Top;
    while (tmp->p != NULL) 
    {
        tmp = tmp->p;
        level++;
    }
    
    if (plf == NULL)
        plf = (leaf*)malloc(sizeof(leaf) + 4);
 
    plf[n].level = level;
    plf[n++].nd = Top;
 
    plf = (leaf*)realloc(plf,(sizeof(leaf) + 4) * (n + 1));
 
    WayUpDown(Top->l);
    WayUpDown(Top->r);
} 
 
int MaxLevel(leaf* plf)
{
    int max = 0;
    for (int i = 0; plf[i].level >= 0; i++)
        max = (plf[i].level > plf[max].level) ? i : max;
    return (plf[max].level >= 0) ? plf[max].level : -1;
}
 
void Normalize(leaf* plf)
{
    for (int i = 0; plf[i].level >= 0; i++)
    {
        int r = i, count = 0;
        for (int t = 0; plf[t].level >= 0; t++)
            if ((plf[t].level == plf[i].level) && 
                (plf[t].nd->d == plf[i].nd->d) && (i != t))
                count = count + 1;
 
        while(plf[r].level >= 0 && count <= 0)
         { plf[r] = plf[r+1]; r++; }
 
        if (count <= 0) i--;
    }
}
 
void ViewTwins(leaf* plf)
{
    int len = MaxLevel(plf); Normalize(plf);
    for (int level = 0; level <= len; level++)
    {
        cout<<"Уровень ("<<level<<"): ";
        for (int i = 0; plf[i].level >= 0; i++)
            if (plf[i].level == level)
                cout<<plf[i].nd->d<<" ";
 
        cout<<endl;
    }
}
 
void ViewTree(node *Top,int level)
{
    if (Top){
        ViewTree(Top->l,level+1);
        for (int i=0;i<level;i++)
            cout<<"   ";
        cout<<Top->d<<endl;
        ViewTree(Top->r,level+1);
    }
}
 
void main()
{
    setlocale(LC_CTYPE, "Russian");
    node *Top;
    MakeTree(&Top);
    //ViewTree(Top,0);
    WayUpDown(Top);
    ViewTwins(plf);
    _getch();
    return;
}
 
Текущее время: 08:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru