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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа на С http://www.cyberforum.ru/cpp-beginners/thread306356.html
Доброго времени суток. Помогите пожалуйста с программкой на C Задача такая: Создать программу которая содержит динамическую информацию про наличие автобусов в авто. парке. Ведомость про каждый...
C++ Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о. владельца, марка авто, год выпуска, страна производитель. ... http://www.cyberforum.ru/cpp-beginners/thread306352.html
C++ неправильное значение переменной
вот код #include "stdafx.h" #include <cstdlib> #include <iostream> #include <cmath> using namespace std; int _tmain(int argc, _TCHAR* argv){ setlocale(LC_CTYPE,"rus"); int m,n,koeff,a;...
C++ Абракадабровый C++
Вся проблема в чём - при вводе на русском я пишу какой-то абракадброй вроде иероглифов. Следствие установило, что эта хрень начинается после цикла do. Вот сам код, чистый консольный проект вин32:...
C++ Программа удаляет из строки слово с заданным номером. http://www.cyberforum.ru/cpp-beginners/thread306298.html
Помогите! нужно написать программу на "С". "Программа удаляет из строки слово с заданным номером!"(как объяснял преподаватель например 2 строки "скоро курсовая работа(20 символов в этой строке)...
C++ Расчетно-графическая работа Помогите пожалуйста. Необходимо написать расчетно-графическую работу которая будет состоять из: 1) заставки(любая картинка или несложная анимация) 2) и программы Задание по программе: построить... подробнее

Показать сообщение отдельно
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
05.06.2011, 22:25  [ТС]
ага и как решать подсказывает

Добавлено через 8 минут
файл TreeNode.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template< typename T > class Tree;
template< typename T >
class TreeNode
{
    friend class Tree< T >;
 
public:
    TreeNode();
    TreeNode(const T &);
private:
    T _data;
    TreeNode< T > *_left;
    TreeNode< T > *_right;
};
файл TreeNode.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "TreeNode.h"
template< typename T >
TreeNode< T >::TreeNode():
_left(0),
_right(0)
{
}
 
template< typename T >
TreeNode< T >::TreeNode(const T &data):
_data(data),
_left(0),
_right(0)
{
}
файл Tree.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "TreeNode.cpp"
template< typename T >
class Tree
{
public:
    Tree();
    ~Tree();
    void insert(const T &);
    void remove(const T &);
    void print() const;
private:
    TreeNode< T > *_root;
    void insert_helper(TreeNode< T > **, const T &);
    void remove_helper(TreeNode< T > **, const T &);
    void delete_helper(TreeNode< T > *); 
    void print_helper(TreeNode< T >*, int) const;
};
файл Tree.cpp
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
#include "Tree.h"
template< typename T >
Tree< T >::Tree():
_root(0)
{
}
 
template< typename T >
Tree< T >::~Tree()
{
    delete_helper(_root);
}
 
template< typename T >
void Tree< T >::delete_helper(TreeNode< T > *node)
{
    if (node != 0)
    {
        delete_helper(node->_left);
        delete_helper(node->_right);
 
        delete node;
    }
}
 
template< typename T >
void Tree< T >::insert(const T &data)
{
    insert_helper(&_root, data);
}
 
template< typename T >
void Tree< T >::insert_helper(TreeNode< T > **node, const T &data)
{
    if (*node == 0)
        *node = new TreeNode< T > (data);
    else
    {
        if ((*node)->_data > data)
            insert_helper(&((*node)->_left), data);
        else
        {
            if ((*node)->_data < data)
                insert_helper(&((*node)->_right), data);
        }
    }
}
 
template< typename T >
void Tree< T >::remove(const T &data)
{
    remove_helper(&_root, data);
}
 
template< typename T >
void Tree< T >::remove_helper(TreeNode< T > **node, const T &data)
{
    if ((*node)->_data == data)
    {
        TreeNode< T > *del_node = *node;
 
        if ((*node)->_left == 0 && (*node)->_right == 0)
        {
            *node = 0;
 
            delete del_node;
        }
        else
        {
            if ((*node)->_left == 0)
            {
                *node = (*node)->_right;
 
                delete del_node;
            }
            else
            {
                if ((*node)->_right == 0)
                {
                    *node = (*node)->_left;
 
                    delete del_node;
                }
                else
                {
                    TreeNode< T > *p = *node;
                    TreeNode< T > *i = (*node)->_left;
 
                    while (i->_right != 0)
                    {
                        p = i;
                        i = i->_right;
                    }
 
                    *node = i;
                    p->_right = i->_left;
                    i->_right = del_node->_right;
                    i->_left = p;
 
                    delete del_node;
                }
            }
        }
    }
    else
    {
        if ((*node)->_data > data)
            remove_helper(&((*node)->_left), data);
        else
        {
            if ((*node)->_data < data)
                remove_helper(&((*node)->_right), data);
        }
    }
}
 
template< typename T >
void Tree< T >::print() const
{
    print_helper(_root, 0);
}
 
template< typename T >
void Tree< T >::print_helper(TreeNode< T > *node, int spaces) const
{
    while (node != 0)
    {
        print_helper(node->_right, spaces + 5);
 
        for (int i = 1; i < spaces; ++i)
            std::cout << ' ';
 
        std::cout << node->_data << std::endl;
        node = node->_left;
        spaces += 5;
    }
}
файл bits.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//двоичные строки(сравнивать в лексикографическом порядке)
#include "string.h"
#include <iostream>
using namespace std;
template< typename T > class Tree;
class bits
{
    public:
        char* data; 
        bits();
        ~bits();
        friend istream& operator>>(istream &,bits &);//перегруженный оператор ввода
        friend ostream& operator<<(ostream &,bits &);//перегруженный оператор вывода
        friend bool operator>(const bits &,const bits &);
        friend bool operator<(const bits &,const bits &);
};
файл bits.cpp
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
#include "bits.h"
bits::bits()
{
    data=new char[20];
}
bits::~bits()
{
    delete data;
}
bool operator>(const bits &tmp1,const bits &tmp2)
{
    int k=0;
    k=strcmp(tmp1.data,tmp2.data);
    if(k>0) 
        return true;
    else 
        return false;
}
bool operator<(const bits &tmp1,const bits &tmp2)
{
    int k=0;
    k=strcmp(tmp1.data,tmp2.data);
    if(k<0) 
        return true;
    else 
        return false;
}
std::ostream& operator <<(std::ostream &out,bits &t)//Стандартный оператор вывода.
{
    out<<t.data;
    return out;
}
std::istream& operator >>(std::istream &in,bits &t)//Стандартный оператор ввода.
{
    in.sync();
    in.clear();
    while (in.peek()!=10||in.eof())
    {
        in>>t.data;
    }
    return in;
}
главный файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include "Tree.cpp"
#include "bits.cpp"
 
void main()
{
    Tree<bits> n;
    bits t;
    int i=0;
    for(i;i<3;i++)
    {
        cin>>t; 
        n.insert(t);//здесь он должен добавлять двоичные строки в дерево, но строка постоянно присваивается корню дерева((
    }
    n.print();
 
 
}
З.Ы. переделывал программу по другому

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