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

испрвить код - бинарное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа для расчёта з/п http://www.cyberforum.ru/cpp-beginners/thread756374.html
Ребят, может кто-то сталкивался с похожим заданием. Очень нужно выполнить, а сам не могу. Даже некого попросить. Надеюсь вы сможете помочь. Задание: создать ПО для расчета заработной платы. Создать программу при выполнении которой пользователь может: -определить оклад сотрудника предприятия при помощи горизонтальной полосы прокрутки (1000грн-15000грн) -ввести данные о кол-ве рабочих...
C++ Сортировка одномерного массива методом выбора #include <iostream> using namespace std; #include <math.h> #include <conio.h> int main() { int imin,i,j,buf; int s; cout<<"vvedite razmer massiva "; cin>>s; int *a = new int; http://www.cyberforum.ru/cpp-beginners/thread756368.html
C++ Отследить нажатие определенных клавиш
Доброй ночи Не получается решить такую проблему Через getch() получаю код клавиши и рядом вывожу соответствующий символ Но по заданию нужно вводить только латинские буквы и цифры while(true) do { с = getch(); } while(CHAR(c)!='a' || CHAR(c)!='b' || ......);
Непонятное условие задачи C++
Создать класс Array --- одномерный массив целых чисел c задаваемыми границами индексов c возможностью задания отрицательных индексов. обязательно должны быть реализованы: отслеживание количества элементов, все операции c массивом и целым числом, поиск заданного элемента, все поэлементные операции, поддержанные в C++ для целых. не понимаю условия вообще( как это "задания отрицательных индексов"...
C++ Вычислить сумму элементов массива с нечетными номерами http://www.cyberforum.ru/cpp-beginners/thread756357.html
Есть условие задачи: В одномерном массиве, состоящем из 20 вещественных элементов, вычислить: 1) сумму элементов массива с нечетными номерами; 2) сумму элементов массива, расположенных между первым и последним отрицательными элементами. Сжать массив, удалив из него все элементы, модуль которых не превышает 1. #include <iostream> #include <conio.h> using namespace std;
C++ Найти максимальный среди элементов, лежащих выше побочной диагонали. Ошибки в коде С++ 2) задание Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе функцию пользователя. 9. Найти максимальный среди элементов, лежащих выше побочной диагонали. Код программы #include <iostream.h>- #include <iomanip.h>... подробнее

Показать сообщение отдельно
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 133
09.01.2013, 06:09     испрвить код - бинарное дерево
Здравствуйте!!
написал программу для работы с бинарным деревом. Каждая вершина содержит массив целых из 4 элементов, ключ по которому данные распределяются влево/вправо и и два указателя на правое и левое поддерево.
Код получился мягко говоря не очень. Ощущение что перемудрил слишком, например вот этот кусок

Кликните здесь для просмотра всего текста

C++
1
2
3
4
typedef struct
{
  tItem data[N];
} tItemN;


как написать более изящно??
весь код ниже

Кликните здесь для просмотра всего текста

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
#include <iostream>
#define N 4
using namespace std;
class cTree;
typedef int tItem;
 
typedef struct
{
  tItem data[N];
} tItemN;
 
struct Node {
 tItem key;
 tItem getKey() { return key; }
 tItemN data;
 tItemN getData() { return data;}
 Node* pLeft;
 Node* pRight;
 Node(tItem w, tItem v[N]): key(w), pLeft(0), pRight(0) { int i; for(i=0; i < N; i++) data.data[i]=v[i];}
 ~Node() {}
};
 
class cTree {
 private:
  Node* root;
  Node* _Add(Node* root, tItem key, tItem data[N]);
  void _CrossWalk(Node* root, void visit(Node*));
  static void delNode(Node* root) { delete root;}
 public:
  cTree(): root(0) {};
  void Add(tItem key, tItem data[N]) { root = _Add(root,key,data);}
  void crossWalk(void visit(Node*)) { _CrossWalk(root,visit);}
  Node* getRoot() { return root;}
  ~cTree() { _CrossWalk(root, delNode);}
};
 
Node* cTree::_Add(Node* root, tItem key, tItem data[]) {
 if (!root)
  root = new Node(key,data);
 else if (key < root->key)
  root->pLeft = _Add(root->pLeft, key, data);
 else
  root->pRight = _Add(root->pRight, key, data);
 return root;
};
 
void cTree::_CrossWalk(Node* root, void visit(Node*)) {
 if (root == 0) return;
 _CrossWalk(root->pLeft, visit);
 visit(root);
 _CrossWalk(root->pRight, visit);
};
 
void getKey(Node* root) { 
 cout << root->getKey() << " - ";
 tItemN data;
 data = root->getData();
 int i;
 for(i=0; i < N; i++) {
  cout << data.data[i] << " ";
 }
};
 
int main(int argc,char *argv[]){
 tItem key,data[N];
 
 cTree bt;
 cout << "Введите ключ ";
 cin >> key;
 int i;
 for(i=0; i < N; i++) {
  cout << "Введите " << i+1 << "-ое число ";
  cin >> data[i];
 }
 bt.Add(key,data);
 cout << "Поперечный обход дерева ";
 bt.crossWalk(getKey);
 cout << "\n";
 return 0;
}


подскажите плиз!! буду очень благодарен

Добавлено через 3 часа 58 минут
ну помогите плиз, я с++ не особо знаю, буду рад любым подсказкам!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru