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

Нужно посчитать сложность алгоритма - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти модуль суммы и квадрат произведения компонент файла http://www.cyberforum.ru/cpp-beginners/thread1025029.html
Помогите пожалуйста решить задачку. Дан файл f, компоненты которого являются действительными числами. Найти модуль суммы и квадрат произведения компонент файла f. (на с++). Заранее благодарен.
C++ Подсчитать одинаковые элементы Уважаемые опытные программисты! Помогите решить мне одну проблему. Суть её в следующем: Мне нужно посчитать количество одинаковых символов в массиве и вывести это количество. Я перебрал много способов, но ни один не помог. Вот код программы: #include "stdafx.h" #include "clocale" #include "iostream" int main() http://www.cyberforum.ru/cpp-beginners/thread1025027.html
C++ стилилизация pictureBox1.Image
доброго времяни суток,помогите кусочком кода,как стилилизовать и дистилизовать pictureBox1.Image?)
Составьте программу для вычисления значения силы тока I на участке C++
Сам работаю. А скоро нужно сдать все! Помогите пж буду благодарен! 1.Составьте программу для вычисления значения силы тока I на участке, состоящем из двух параллельно соединенных резисторов сопротивлением R1 и R2, если напряжение на концах этого участка равно U. одна тема - одна задача, читайте правила форума
C++ Квадратная матрица http://www.cyberforum.ru/cpp-beginners/thread1025004.html
Ребят, попыталась написать в Билдере программу для квадратной матрицы. Выглядит она так: #include <iostream.h> #include <conio.h> int main () { int i, j, N, M, a; cout<<"N=\n"; cin>>N; cout<<"Repeat\n"; cin>>M;
C++ Два максимальных числа Привет все:) Есть код, на нахождение максимального числа. Как его переделать что бы выводилось два максимальных числа ( каждое число должно вводиться один раз ). Заранее большое спасибо:) int main() { int a = 0; // введенное число int max = 0; // первой макс.число int counter = 0; // счетчик while( counter < 10 ) { подробнее

Показать сообщение отдельно
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70

Нужно посчитать сложность алгоритма - C++

01.12.2013, 22:23. Просмотров 349. Ответов 2
Метки (Все метки)

Дорогие обитатели форума, нужно посчитать сложность рекурсивной функции удаления вершин из бинарного дерева. К сожалению, не представляю, как это можно сделать =( В задании сказано воспользоваться некой формулой и посчитать в общем случае, а затем в самом коде добавить какую-то переменную, которая поможет сосчитать сложность в конкретных случаях.

Программа:
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
148
149
#include<iostream>
#include<conio.h>
#include<time.h>
using namespace std;
 
struct tree
{
       int info;
       tree *right, *left; 
};
 
tree* bt=NULL;
 
void push(int a, tree **t)
{
    if((*t)==NULL)
    {
        (*t)=new tree;
        (*t)->info=a;
        (*t)->left=(*t)->right=NULL; 
        return;
    }
    if(a>(*t)->info)
        push(a,&(*t)->right); 
    else
        push(a,&(*t)->left); 
};
 
void print(tree *t, int l)
{
  if(t!=NULL)
  {
    print(t->right, l+1);
    for(int i=0; i< l; i++)
        cout<< "   ";
        printf("%4ld", t->info);
        print(t->left, l+1);
  }
  else cout<<endl;
};
 
void count(tree *t, int & c)
{
  if(t!=NULL)
  {
    c=c+1;
    count(t->left, c);
    count(t->right, c);
  }
};
 
void check(tree *t, bool & f, int c)
{
  if(t!=NULL)
  {
    if(t->info==c)
        f=true;
    check(t->left, f, c);
    check(t->right, f, c);
  }
};
 
 
void Delete(tree** t)
{
  if((*t)!=NULL)
  {
      if ((((*t)->left==NULL||(*t)->right==NULL))&&!((*t)->left==NULL&&(*t)->right==NULL))
    {
      tree* ptr=(*t);
      if((*t)->left==NULL&&(*t)->right==NULL) 
          (*t)=NULL;
      else 
          if((*t)->left==NULL)
              (*t)=ptr->right;
          else
              if((*t)->right==NULL)
              (*t)=ptr->left;
      else
      {
        (*t)=ptr->right;
        tree **ptr1;
        ptr1=t;
        while(*ptr1!=NULL) 
          ptr1=&((*ptr1)->left);
        (*ptr1) = ptr->left;
      }
      delete(ptr);
      Delete(t);
    }
    else {
      Delete(&((*t)->left));
      Delete(&((*t)->right));
    }
  }
};
 
 void DeleteTree(tree* t)
 {
  if(t!=NULL)
  {
    DeleteTree(t->left);
    DeleteTree(t->right);
    delete(t);
  }
};
 
int main()
{
    int n;
    cin>>n;
 
    for(int i=0; i<n; i++)
    {
        int s;
        cin>>s;
        push(s, &bt);
    }
    print(bt, 0);
    Delete(&bt);
    cout<<endl;
    print(bt, 0);
 
    //Test1//
    int c=0;
    count(bt,c);
    cout<<"Kol-vo vershin= "<<c<<endl;
 
    //Test2//
    bool f=false;
 
    cout<<"Vvedite vershinu, nalichie kotoroi hotite proverit`"<<endl;
    cin>>c;
    check(bt, f, c);
    if(f)
        cout<<"Vershina prisutstvuet"<<endl;
    else
        cout<<"Takoi vershiny v dereve net"<<endl;
 
    //Test3//
    DeleteTree(bt);
    if(bt!=NULL)
        print(bt,0);
    else
        cout<<"Dereva net"<<endl;
    
    getch();
    return 0;
}
Функция, с которой нужно работать:
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
void Delete(tree** t)
{
  if((*t)!=NULL)
  {
      if ((((*t)->left==NULL||(*t)->right==NULL))&&!((*t)->left==NULL&&(*t)->right==NULL))
    {
      tree* ptr=(*t);
      if((*t)->left==NULL&&(*t)->right==NULL) 
          (*t)=NULL;
      else 
          if((*t)->left==NULL)
              (*t)=ptr->right;
          else
              if((*t)->right==NULL)
              (*t)=ptr->left;
      else
      {
        (*t)=ptr->right;
        tree **ptr1;
        ptr1=t;
        while(*ptr1!=NULL) 
          ptr1=&((*ptr1)->left);
        (*ptr1) = ptr->left;
      }
      delete(ptr);
      Delete(t);
    }
    else {
      Delete(&((*t)->left));
      Delete(&((*t)->right));
    }
  }
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru