Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aliceen13
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 11
#1

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

20.03.2017, 17:55. Просмотров 178. Ответов 1
Метки нет (Все метки)

Добрый день!

Дали такое задание на лабораторную работу. кое-что получилось, а в остальном прошу Вас помочь...

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

Не получилось найти номер узла, большего среднего арифметического, и не разобрался как сделать из обычного дерева дерево поиска.

Большое спасибо всем, кто поможет

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
#include "stdafx.h"
#include "time.h"
#include<iostream>
using namespace std;
 
struct BinaryTree{
       int Data; //поле данных
       BinaryTree* Left; //указатель на левый потомок
       BinaryTree* Right; //указатель на правый потомок
 
};
 
BinaryTree* BTree = NULL;
BinaryTree* Node;
//создание бинарного дерева
void Make_Binary_Tree(BinaryTree** Node, int n){
  BinaryTree** ptr;//вспомогательный указатель
  srand(time(NULL)*1000);
  while (n > 0) {
    ptr = Node;
    while (*ptr != NULL) {
      if ((double) rand()/RAND_MAX < 0.5) 
        ptr = &((*ptr)->Left);
      else ptr = &((*ptr)->Right);
    }
    (*ptr) = new BinaryTree();
    cout << "Vvedite znachenie ";
    cin >> (*ptr)->Data;
    n--;
  }
}
 
//печать бинарного дерева
void Print_BinaryTree(BinaryTree* Node, int l){
  int i;
  if (Node != NULL) {
    Print_BinaryTree(Node->Right, l+1);
    for (i=0; i< l; i++) cout << "    ";
    printf ("%4ld", Node->Data);
    Print_BinaryTree(Node->Left, l+1);
  }
  else cout << endl;
}
 
//прямой обход бинарного дерева
void PreOrder_BinaryTree(BinaryTree* Node,double sr){
  if (Node != NULL) {
        if (Node->Data>sr)
    printf ("%3ld",Node->Data);
 
    PreOrder_BinaryTree(Node->Left,sr);
    PreOrder_BinaryTree(Node->Right,sr);
  }
}
 
//освобождение памяти, выделенной под бинарное дерево
void Delete_BinaryTree(BinaryTree* Node){
  if (Node != NULL) {
    Delete_BinaryTree(Node->Left);
    Delete_BinaryTree(Node->Right);
    delete(Node);
  }
}
 
 
void AvgTreeRecourse(BinaryTree * Node, double &sum, int &count){ if(Node==NULL) return;
sum = sum + Node->Data; count++;
AvgTreeRecourse(Node->Left, sum, count); AvgTreeRecourse(Node->Right, sum, count);
}
double AvgTree(BinaryTree root){ double sum = 0;
int cnt = 0; AvgTreeRecourse(Node, sum, cnt); if(cnt>0) sum = sum/cnt;
return sum;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
 
{ setlocale(0,".1251");
double avg=0;
    BinaryTree* myBT=new BinaryTree();
    int n;
cout<<"vvedite kolvo elementov dereva: ";
cin>>n;
 Make_Binary_Tree(&Node, n);
 Print_BinaryTree( Node,  n);
 avg=AvgTree(*Node);
 printf("srednee arifmeticheskoe uzlov %lf \n", avg);
 PreOrder_BinaryTree(Node,avg);
 Delete_BinaryTree(Node);
 system("pause");
    return 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2017, 17:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарные деревья С++ (C++):

Бинарные деревья - C++
Доброго времени суток, нужна помощь, дали задание...Вершина бинарного дерева содержит ключ, строку и два указателя на потомков.Составить...

Бинарные деревья - C++
Подсчитать количество элементов на n-уровне бинарного дерева. Подскажите как можно решить используя любой обход в глубину но без...

Бинарные деревья - C++
Компилятор выдаёт ошибки в 9, 10 и 12, 13 строках: invalid conversion from 'int' to 'sNode*' Подскажите пожалуйста, что не так. ...

Бинарные деревья - C++
Возникла проблема с бинарными деревьями . Нужно определить K - количество узлов, ключ которых больше заданного числа N. Я дошёл только до...

Бинарные деревья - C++
Очень нужна помощь, вообще деревья не понимаю!!!:( Вершина дерева содержит указатель на строку и N указателей на потомков. Функция...

бинарные деревья - C++
Вершина двоичного дерева содержит указатель на строку и указатели на правое и левое поддеревья. Строки в дереве упорядочены по возрастанию....

1
DemolitionMan
98 / 154 / 47
Регистрация: 06.04.2016
Сообщений: 992
20.03.2017, 18:20 #2
Может еще номер в узел добавить?

Добавлено через 4 минуты
Цитата Сообщение от aliceen13 Посмотреть сообщение
Не получилось найти номер узла, большего среднего арифметического, и не разобрался как сделать из обычного дерева дерево поиска.
А что дерево поиска-то делать. Ну также это будет как просмотр(в данном случае(у Вас) это PrintBinaryTree()) только поиск элемента и проверка по условию.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2017, 18:20
Привет! Вот еще темы с ответами:

Бинарные деревья - C++
Вот задачка: Для заданного бинарного дерева поиска проверить условие: • для каждой вершины высота левого поддерева отличается от...

Бинарные деревья - C++
Здравствуйте! Подскажите, правильно ли написано правое удаление вершины дерева? if(tree1-&gt;Right){ if(tree1-&gt;Right-&gt;Left==NULL){ ...

Бинарные деревья - C++
1)Написать программу подсчета числа вершин в бинарном дереве 2)Написать программу копирования одного бинарного дерева в другое ...

Бинарные деревья - C++
Здравствуйте господа. Очень нуждаюсь в вашей помощи по бинарным деревьям. Собственно, имеется задание: Создать бинарное дерево которое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru