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

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

Войти
Регистрация
Восстановить пароль
 
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
09.01.2013, 06:09     испрвить код - бинарное дерево #1
Здравствуйте!!
написал программу для работы с бинарным деревом. Каждая вершина содержит массив целых из 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 минут
ну помогите плиз, я с++ не особо знаю, буду рад любым подсказкам!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2013, 06:09     испрвить код - бинарное дерево
Посмотрите здесь:

C++ Бинарное дерево
бинарное дерево C++
Бинарное дерево C++
C++ Бинарное дерево
Бинарное дерево C++
Бинарное дерево C++
C++ Бинарное дерево
Бинарное дерево C++
Бинарное дерево C++
C++ Классы, бинарное дерево, конструкторы. Исправить код
Бинарное дерево C++
C++ Бинарное дерево

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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