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

Бинарное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в программе http://www.cyberforum.ru/cpp-beginners/thread117822.html
Помогите найти ошибку в программе!
C++ Проверка ввода Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так чтоб когда пользователь вводит к примеру Ф123;:87!"№;;%:!"№;%:?*(99321фвфв и тд.. или что нить подобное после проверки попросить повторить ввод даного елемента масива(или числа)? Я находил в темах немного подобное моему примеру но не смог розобратса, покажыте... http://www.cyberforum.ru/cpp-beginners/thread117811.html
C++ Вводить название фигуры, выводить формулу для вычисления площади этой фигуры
Вводить название фигуры (треугольник, квадрат, ромб, прямоугольник) выводить формулу для вычисления площади этой фигуры.
Выбор C++
Ввести первую букву названия реки. Вывести справку о его длину и количество притоков.
C++ Глобальная переменная http://www.cyberforum.ru/cpp-beginners/thread117800.html
Никогда с таким не сталкивался... В общем: Надо обьявить глобальный масив в одной функции, но чтобы его видели все другие функции. Вне функции обьявить нельзя. А что делать?
C++ C++: класс матрица. Действия с ними Вечер добрый. Делаю следующую лабу - уже забадался... Суть: сделать класс "матрица". В объекте "матрица" должны быть перегружены операторы +, -, *, /. Записать в файл. Реализовать метод "детерминант". Вот то, что вышло. Оно работает. #include <iostream.h> #include <conio.h> #include <math.h> class matrix { // клас матриця подробнее

Показать сообщение отдельно
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
17.04.2010, 08:29     Бинарное дерево
Иногда полезно пользоваться поиском по форуму

1. Создание пустого дерева
2. Добавление элемента в дерево.
3. Удаление поддерева с заданной корневой вершиной.
4. Вывод структуры дерева на экран монитора.
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
#include<iostream.h>
struct  node
{
  int Key;
  int Count;
  node *Left;
  node *Right;
};
 
class TREE
{
  private:
    node *Tree; //Указатель на корень дерева.
    void Search (int,node**);
  public:
    TREE() {Tree=NULL;}
    node** GetTree () {return &Tree;} //Получение вершины дерева.
    void BuildTree ();
    void CleanTree (node **);
    void ObhodEnd (node **);
    void ObhodLeft (node **);
    void ObhodBack (node **);
    void Vyvod (node**,int);
    int Height (node**);
};
 
void main ()
{
  TREE A;
 
  A.BuildTree ();
  cout<<"\nВывод дерева:\n";
  A.Vyvod (A.GetTree(),0);
  cout<<"\nВысота дерева:"<<A.Height(A.GetTree())<<endl;
  cout<<"\nЛевосторонний обход дерева: ";
  A.ObhodLeft (A.GetTree());
  cout<<"\nКонцевой обход дерева: "; A.ObhodEnd (A.GetTree());
  cout<<"\nОбратный обход дерева: "; A.ObhodBack (A.GetTree());
  A.CleanTree (A.GetTree());
}
 
void TREE::BuildTree ()
// Построение бинарного дерева (рекурсивный алгоритм).
// Tree - указатель на корень дерева.
{
  int el;
 
  cout<<"Вводите ключи вершин дерева ...\n";
  cin>>el;
  while  (el!=0)
  { Search (el,&Tree); cin>>el; }
}
 
void TREE::Search (int x,node **p)
//  Поиск вершины с ключом x в дереве со вставкой
//             (рекурсивный алгоритм).
// *p - указатель на корень дерева.
{
  if  (*p==NULL)
  {// Вершины в дереве нет; включить ее.
    *p = new(node);
    (**p).Key = x;     (**p).Count = 1;
    (**p).Left = NULL; (**p).Right = NULL; }
  else
    if  (x<(**p).Key) Search (x,&((**p).Left));
    else
      if  (x>(**p).Key) Search (x,&((**p).Right));
      else  (**p).Count = (**p).Count + 1;
}
 
void TREE::ObhodLeft (node **w)
//Левосторонний обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  {
    cout<<(**w).Key<<" ";
    ObhodLeft (&((**w).Left));
    ObhodLeft (&((**w).Right));
  }
}
 
void TREE::ObhodEnd (node **w)
//Концевой обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { ObhodEnd (&((**w).Left));
    ObhodEnd (&((**w).Right));
    cout<<(**w).Key<<" "; }
}
 
void TREE::ObhodBack (node **w)
//Обратный обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { ObhodBack (&((**w).Left));
    cout<<(**w).Key<<" ";
    ObhodBack (&((**w).Right)); }
}
 
void TREE::CleanTree (node **w)
//Очистка дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { CleanTree (&((**w).Left));
    CleanTree (&((**w).Right));
    delete *w; }
}
 
void TREE::Vyvod (node **w,int l)
//Изображение дерева *w на экране дисплея
//          (рекурсивный алгоритм).
//*w - указатель на корень дерева.
{
  int i;
 
  if  (*w!=NULL)
  { Vyvod (&((**w).Right),l+1);
    for  (i=1; i<=l; i++) cout<<"   ";
    cout<<(**w).Key<<endl;
    Vyvod (&((**w).Left),l+1); }
}
 
int TREE::Height (node **w)
//Определение высоты бинарного дерева.
//*w - указатель на корень дерева.
{
  int h1,h2;
  if  (*w==NULL) return (-1);
  else
  {
    h1 = Height (&((**w).Left));
    h2 = Height (&((**w).Right));
    if  (h1>h2) return (1 + h1);
    else  return (1 + h2);
  }
}
 
Текущее время: 09:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru