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

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

Войти
Регистрация
Восстановить пароль
 
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
#1

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

09.01.2013, 06:09. Просмотров 266. Ответов 0
Метки нет (Все метки)

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

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру - C++
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Классы, бинарное дерево, конструкторы. Исправить код - C++
Здравствуйте! Не знаю, как исправить последнюю возникшую ошибку и заставить программу работать. А уже скоро сдавать и преподавателя...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой - C++
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

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

Бинарное дерево - C++
Мой код: Patient.h // // Created by User on 26.04.2016. // #ifndef LABA_10_PATIENT_H #define LABA_10_PATIENT_H using...

Бинарное дерево - C++
Здравствуйте дорогие форумчане. Помогите, пожалуйста, реализовать бинарное дерево поиска, а так же операции по добавлению элемента в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 06:09
Привет! Вот еще темы с ответами:

Бинарное дерево - C++
Привет Делаю бинарное дерево, пытаюсь добавить элемент. Что делаю не так? Класс дерева struct node{ int data; //поле...

Бинарное дерево - C++
Разработать и реализовать на языке С следующие функции работой с бинарным деревом: 1. Создание пустого дерева 2. Добавление элемента в...

Бинарное дерево - C++
Только начал изучать тему &quot;деревья&quot;. Подскажите в чем ошибка)#include &lt;iostream&gt; using namespace std; struct Node{ int...

Бинарное дерево - C++
Помогите исправить ошибку, компилятор ругается на 110 строку, не пойму почему( #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...


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

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

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