Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/72: Рейтинг темы: голосов - 72, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15

Бинарное дерево. Обход бинарного дерева (симметрический, прямой и обратный)

18.05.2010, 22:31. Показов 13568. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Мне надо в курсовой работе написать программу, которая строит бинарное дерево (по вводимым значениям) и потом обходит это дерево в прямом(корень->левое поддерево->правое поддерево), обратном(левое поддерево->правое поддерево->корень) и симметрическом (левое поддерево->корень->правое поддерево)порядке. Как это все сделать, я не знаю вообще =(( Позарез надо(( Вся надежда на вас
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2010, 22:31
Ответы с готовыми решениями:

Обратный обход бинарного дерева и удаление элементов
От пользователя получить количество элементов, случайным чином заполнить бинарное дерево. Реализовать обратной обход дерева и удаление...

Бинарное Дерево(обход дерева)
добрый вечер всем!) в универе задали написать бинарное дерево со всеми видами обхода и т.п. я их написал.. но еще дали 1 вывод его надо...

Дополнить код, чтобы получился полноценный прямой обход бинарного дерева
Подскажите как дополнить код,что бы получился полноценный прямой обход бинарного дерева... #include "stdafx.h" #include...

20
 Аватар для dyosick
64 / 64 / 17
Регистрация: 25.08.2008
Сообщений: 178
18.05.2010, 23:01
Не поленись и найди книгу Х.М.Дейтел,П.Дж.Дейтел "Как программировать на С++", 5-ое издание. Глава 20 "Структуры данных", раздел 20.7 "Деревья".
Там весь код, что тебе нужен.
Желаю удачи!
1
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
18.05.2010, 23:21  [ТС]
Спасибо! Буду разбираться.
0
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 08:29  [ТС]
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
#include "stdafx.h"
//TREENODE.H Определение класса TreeNode
#ifdef TREENODE_H
#define TREENODE_H
 
template<class NODETYPE> class TreeNode
{
    friend class Tree<NODETYPE>;
public:
    TreeNode(const NODETYPE &);
    NODETYPE getData() const;
private:
    TreeNode *leftPtr;
    NODETYPE data;
    TreeNode *rightPtr;
};
template<class NODETYPE>
TreeNode<NODETYPE>::TreeNode (const NODETYPE &d)
{
    data=d;
    leftPtr=rightPtr=0;
}
template<class NODETYPE>
NODETUPE TreeNode<NODETYPE>::getData() const
{return data;}
#endif
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
#ifdef TREE_H
#define TREE_H
#include <iostream>
using namespace std;
#include <assert.h>
#include "treenode.h"
 
template<class NODETYPE>
class Tree
{
    public:
    Tree();
    void insertNode (const NODETYPE &);
    void preOrderTraversal() const;
    void inOrderTraversal() const;
    void postOrderTraversal() const;
    private:
    TreeNode<NODETYPE> *rootPtr;
    void insertNodeHelper(TreeNode<NODETYPE> **,const NODETYPE &);
    void preOrderHelper(TreeNode<NODETYPE> *) const;
    void inOrderHelper(TreeNode<NODETYPE> *) const;
    void postOrderHelper(TreeNode<NODETYPE> *) const;
};
template<class NODETYPE>
Tree<NODETYPE>::Tree() {rootPtr=0;}
 
template<class NODETYPE>
void Tree<NODETYPE>::insertNode(const NODETYPE Evalue)
{ insertNodeHelper(&rootPtr, value);}
template<class NODETYPE>
void Tree<NODETYPE>::insertNodeHelper (TreeNode<NODETYPE> **ptr,const NODETYPE &value)
{
    if(*ptr==0)
    {
        *ptr=new TreeNode<NODETYPE>(value);
        assert(*ptr!=0);
    }
    else
        if (value<(*ptr)->data)
            insertNodeHelper(&((*ptr)->leftPtr),value);
        else
            if (value>(*ptr)->data)
                insertNodeHelper(&((*ptr)->rightPtr),value);
            else
                cout<<value<<"DYBL'"<<endl;
}
 
template<class NODETYPE>
void Tree<NODETYPE>::preOrderTraversal() const
{ preOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::preOrderHelper(TreeNode <NODETYPE> *ptr) const
{
    if (ptr!=0)
    {
        cout<<ptr->data<<" ";
        preOrderHelper(ptr->leftPtr);
        preOrderHelper(ptr->rightPtr);
    }
}
template<class NODETYPE>
void Tree<NODETYPE>::inOrderTraversal() const
{ inOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::inOrderHelper(TreeNode <NODETYPE> *ptr) const
{
    if (ptr!=0)
    {
        inOrderHelper(ptr->leftPtr);
        cout<<ptr->data<<" ";
        inOrderHelper(ptr->rightPtr);
    }
}
template<class NODETYPE>
void Tree<NODETYPE>::postOrderTraversal() const
{ postOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::postOrderHelper(TreeNode <NODETYPE> *ptr) const
{
    if (ptr!=0)
    {
        postOrderHelper(ptr->leftPtr);
        postOrderHelper(ptr->rightPtr);
        cout<<ptr->data<<" ";
    }
}
#endif
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
#include <iostream>
using namespace std;
#include <iomanip>
[B]#include "tree.h"[/B]
 
main()
{
    Tree<int> intTree;
    int intVal;
    cout<<"BBEDITE 10 CHISEL INT: "<<endl;
    for (int i=0;i<10;i++)
    {
        cin>>intVal;
        intTree.insertNode(intVal);
    }
    cout<<endl<<"OBXOD B IIIUPUHY"<<endl;
    intTree.preOrderTraversal();
 
    cout<<endl<<"POSLEDOVAYELNUI OBHOD"<<endl;
    intTree.inOrderTraversal();
 
    cout<<endl<<"OBPATHUI OBHOD"<<endl;
    intTree.postOrderTraversal();
return 0;
}
Компелятор пишет: fatal error C1083: Не удается открыть файл include: tree.h: No such file or directory
В чем проблема?
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
24.05.2010, 08:51
Цитата Сообщение от Анна :) Посмотреть сообщение
//TREENODE.H Определение класса TreeNode
может надо так.)
0
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 09:07  [ТС]
Такую же ошибку выдает :-(
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
24.05.2010, 09:09
Ладно, зайдем с другой стороны.
Как ты назвала файл с классом? Или ты все это записала в один файл?
0
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 09:13  [ТС]
В один файл Как в книжке было написано, так все и переписала))
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
24.05.2010, 09:23
В книжке немного по другому было написано.
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
//TREENODE.H Определение класса TreeNode
#ifdef TREENODE_H
#define TREENODE_H
 
template<class NODETYPE> class TreeNode
{
   friend class Tree<NODETYPE>;
   public:
   TreeNode(const NODETYPE &);
   NODETYPE getData() const;
   private:
   TreeNode *leftPtr;
   NODETYPE data;
   TreeNode *rightPtr;
};
template<class NODETYPE>
TreeNode<NODETYPE>::TreeNode (const NODETYPE &d)
{
   data=d;
   leftPtr=rightPtr=0;
}
template<class NODETYPE>
NODETUPE TreeNode<NODETYPE>::getData() const
{return data;}
#endif
Это нужно сохранить в файле treenode.h

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
#ifdef TREE_H
#define TREE_H
#include <iostream>
using namespace std;
#include <assert.h>
#include "treenode.h"
 
template<class NODETYPE>
class Tree
{
   public:
   Tree();
   void insertNode (const NODETYPE &);
   void preOrderTraversal() const;
   void inOrderTraversal() const;
   void postOrderTraversal() const;
   private:
   TreeNode<NODETYPE> *rootPtr;
   void insertNodeHelper(TreeNode<NODETYPE> **,const NODETYPE &);
   void preOrderHelper(TreeNode<NODETYPE> *) const;
   void inOrderHelper(TreeNode<NODETYPE> *) const;
   void postOrderHelper(TreeNode<NODETYPE> *) const;
};
template<class NODETYPE>
Tree<NODETYPE>::Tree() {rootPtr=0;}
 
template<class NODETYPE>
void Tree<NODETYPE>::insertNode(const NODETYPE Evalue)
{ insertNodeHelper(&rootPtr, value);}
template<class NODETYPE>
void Tree<NODETYPE>::insertNodeHelper (TreeNode<NODETYPE> **ptr,const NODETYPE &value)
{
   if(*ptr==0)
   {
      *ptr=new TreeNode<NODETYPE>(value);
      assert(*ptr!=0);
   }
   else if (value<(*ptr)->data)
      insertNodeHelper(&((*ptr)->leftPtr),value);
   else if (value>(*ptr)->data)
      insertNodeHelper(&((*ptr)->rightPtr),value);
   else
   cout<<value<<"DYBL'"<<endl;
}
 
template<class NODETYPE>
void Tree<NODETYPE>:reOrderTraversal() const
{ preOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>:reOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)   
   {
      cout<<ptr->data<<" ";
      preOrderHelper(ptr->leftPtr);
      preOrderHelper(ptr->rightPtr);
   }
}
template<class NODETYPE>
void Tree<NODETYPE>::inOrderTraversal() const
{ inOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::inOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)
   {
      inOrderHelper(ptr->leftPtr);
      cout<<ptr->data<<" ";
      inOrderHelper(ptr->rightPtr);
   }
}
template<class NODETYPE>
void Tree<NODETYPE>:ostOrderTraversal() const
{ postOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>:ostOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)
   {
      postOrderHelper(ptr->leftPtr);
      postOrderHelper(ptr->rightPtr);
      cout<<ptr->data<<" ";
   }
}
#endif
Это нужно сохранить в файле tree.h
Оставшийся код будет основная программа.
0
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 16:07  [ТС]
У меня опять какие-то ошибки полезли!! Кто-нибудь может у себя запустить этот код? ((((
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
24.05.2010, 18:24
Про ошибки по подробней.
0
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
25.05.2010, 18:44  [ТС]
treenode.h(8) : error C2059: синтаксическая ошибка: <
treenode.h(16): см. ссылку на создание экземпляров класса шаблон при компиляции "TreeNode<NODETYPE>"
treenode.h(8) : error C2238: непредвиденные лексемы перед ";"
tree.h(23) : error C2989: Tree: класс шаблон уже объявлен как не класс шаблон
treenode.h(8): см. объявление 'Tree'
tree.h(8) : error C3857: Tree: множественные списки параметров шаблон не допускаются
tree.h(25) : error C2988: неопознанное объявление или определение шаблона
ree.h(25) : error C2059: синтаксическая ошибка: <
\tree.h(28) : error C2039: insertNode: не является членом "`global namespace'"
tree.h(29) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
ree.h(29) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
tree.h(31) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
tree.h(31) : error C2182: Tree: недопустимое использование типа "void"
ree.h(31) : error C2988: неопознанное объявление или определение шаблона
tree.h(31) : error C2059: синтаксическая ошибка: <
tree.h(31) : error C2039: insertNodeHelper: не является членом "`global namespace'"
ree.h(31) : error C2065: NODETYPE: необъявленный идентификатор
ree.h(49) : error C2039: preOrderTraversal: не является членом "`global namespace'"
tree.h(50) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
tree.h(50) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
tree.h(53) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
ree.h(53) : error C2182: Tree: недопустимое использование типа "void"
tree.h(53) : error C2086: int Tree: переопределение
tree.h(31): см. объявление 'Tree'
tree.h(53) : error C2988: неопознанное объявление или определение шаблона
tree.h(53) : error C2059: синтаксическая ошибка: <
tree.h(53) : error C2039: preOrderHelper: не является членом "`global namespace'"
tree.h(53) : error C2065: NODETYPE: необъявленный идентификатор
tree.h(63) : error C2039: inOrderTraversal: не является членом "`global namespace'"
tree.h(64) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
tree.h(64) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
tree.h(67) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
tree.h(67) : error C2182: Tree: недопустимое использование типа "void"
tree.h(67) : error C2086: int Tree: переопределение
1> e:\visual studio 2008\projects\обход упорядоченного дерева\обход упорядоченного дерева\tree.h(31): см. объявление 'Tree'
tree.h(67) : error C2988: неопознанное объявление или определение шаблона
.h(67) : error C2059: синтаксическая ошибка: <
ree.h(67) : error C2039: inOrderHelper: не является членом "`global namespace'"
tree.h(67) : error C2065: NODETYPE: необъявленный идентификатор
tree.h(77) : error C2039: postOrderTraversal: не является членом "`global namespace'"
tree.h(78) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
tree.h(78) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
tree.h(81) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
tree.h(81) : error C2182: Tree: недопустимое использование типа "void"
tree.h(81) : error C2086: int Tree: переопределение
tree.h(31): см. объявление 'Tree'
tree.h(81) : error C2988: неопознанное объявление или определение шаблона
tree.h(81) : error C2059: синтаксическая ошибка: <
tree.h(81) : error C2039: postOrderHelper: не является членом "`global namespace'"
tree.h(81) : error C2065: NODETYPE: необъявленный идентификатор
treenode.h(22) : error C2995: TreeNode<NODETYPE>::TreeNode(const NODETYPE &): шаблон функции уже определен
treenode.h(10): см. объявление 'TreeNode<NODETYPE>::TreeNode'
treenode.h(25) : error C2995: NODETYPE TreeNode<NODETYPE>::getData(void) const: шаблон функции уже определен
treenode.h(11): см. объявление 'TreeNode<NODETYPE>::getData'
.cpp(10) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
.cpp(11) : error C2062: тип "int" не требуется
.cpp(17) : error C2065: intTree: необъявленный идентификатор
.cpp(17) : error C2228: выражение слева от ".insertNode" должно представлять класс, структуру или объединение
.cpp(20) : error C2065: intTree: необъявленный идентификатор
.cpp(20) : error C2228: выражение слева от ".preOrderTraversal" должно представлять класс, структуру или объединение

.cpp(23) : error C2065: intTree: необъявленный идентификатор
.cpp(23) : error C2228: выражение слева от ".inOrderTraversal" должно представлять класс, структуру или объединение

.cpp(26) : error C2065: intTree: необъявленный идентификатор
cpp(26) : error C2228: выражение слева от ".postOrderTraversal" должно представлять класс, структуру или объединение
Вот сколько всего он мне выдал (((

Добавлено через 11 часов 7 минут
Люди, помогите!
0
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
25.05.2010, 19:54
создать файл tree.h
вставить в него вот это

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
#ifndef _TREE_H
#define _TREE_H
#include <iostream>
using namespace std;
#include <assert.h>
#include "treenode.h"
 
template<class NODETYPE>
class Tree
{
public:
   Tree();
   void insertNode (const NODETYPE &);
   void preOrderTraversal() const;
   void inOrderTraversal() const;
   void postOrderTraversal() const;
private:
   TreeNode<NODETYPE> *rootPtr;
   void insertNodeHelper(TreeNode<NODETYPE> **,const NODETYPE &);
   void preOrderHelper(TreeNode<NODETYPE> *) const;
   void inOrderHelper(TreeNode<NODETYPE> *) const;
   void postOrderHelper(TreeNode<NODETYPE> *) const;
};
 
 
template<class NODETYPE>
Tree<NODETYPE>::Tree() { rootPtr=0; }
 
template<class NODETYPE>
void Tree<NODETYPE>::insertNode(const NODETYPE &Evalue)
{ insertNodeHelper(&rootPtr, Evalue);}
 
template<class NODETYPE>
void Tree<NODETYPE>::insertNodeHelper (TreeNode<NODETYPE> **ptr,const NODETYPE &value)
{
   if(*ptr==0)
   {
      *ptr=new TreeNode<NODETYPE>(value);
      assert(*ptr!=0);
   }
   else if (value<(*ptr)->data)
      insertNodeHelper(&((*ptr)->leftPtr),value);
   else if (value>(*ptr)->data)
      insertNodeHelper(&((*ptr)->rightPtr),value);
   else
   cout<<value<<"DYBL'"<<endl;
}
 
template<class NODETYPE>
void Tree<NODETYPE>::preOrderTraversal() const
{ preOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::preOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)   
   {
      cout<<ptr->data<<" ";
      preOrderHelper(ptr->leftPtr);
      preOrderHelper(ptr->rightPtr);
   }
}
 
template<class NODETYPE>
void Tree<NODETYPE>::inOrderTraversal() const
{ inOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::inOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)
   {
      inOrderHelper(ptr->leftPtr);
      cout<<ptr->data<<" ";
      inOrderHelper(ptr->rightPtr);
   }
}
 
template<class NODETYPE>
void Tree<NODETYPE>::postOrderTraversal() const
{ postOrderHelper(rootPtr);}
 
template<class NODETYPE>
void Tree<NODETYPE>::postOrderHelper(TreeNode <NODETYPE> *ptr) const
{
   if (ptr!=0)
   {
      postOrderHelper(ptr->leftPtr);
      postOrderHelper(ptr->rightPtr);
      cout<<ptr->data<<" ";
   }
}
 
#endif
сохранить

создать файл treenode.h
вставить туда вот это
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
//TreeNODE.H Определение класса TreeNode
#ifndef _TREENODE_H
#define _TREENODE_H
 
template<class NODETYPE> 
class TreeNode
{
    template<class NODETYPE> class Tree;
    friend class Tree<NODETYPE>;
public:
    TreeNode(const NODETYPE &);
    NODETYPE getData() const;
public:
    TreeNode *leftPtr;
    NODETYPE data;
    TreeNode *rightPtr;
};
template<class NODETYPE>
TreeNode<NODETYPE>::TreeNode (const NODETYPE &d)
{
   data=d;
   leftPtr=rightPtr=0;
}
template<class NODETYPE>
NODETYPE TreeNode<NODETYPE>::getData() const
{return data;}
#endif
ну а это в main.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
#include <iostream>
#include <iomanip>
#include "tree.h"
 
using namespace std;
int main() {
        Tree<int> intTree;
        int intVal;
        cout<<"BBEDITE 10 CHISEL INT: "<<endl;
        for (int i=0;i<10;i++)
        {
                cin>>intVal;
                intTree.insertNode(intVal);
        }
        cout<<endl<<"OBXOD B IIIUPUHY"<<endl;
        intTree.preOrderTraversal();
 
        cout<<endl<<"POSLEDOVAYELNUI OBHOD"<<endl;
        intTree.inOrderTraversal();
 
        cout<<endl<<"OBPATHUI OBHOD"<<endl;
        intTree.postOrderTraversal();
return 0;
}
при компиляции 0 ошибок 0 предупреждений
1
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
26.05.2010, 22:16
Добрый день, уважаемые форумчане!
dev001 - Ваш код при компиляции...

Bash
1
2
3
4
5
C:\works\...>g++ main.cpp
In file included from tree.h:7,
                    from main.cp:4:
treenode.h:9: error: declaratio of `class NODETYPE`
treenode.h:6: error: shadows template parm `class` NODETYPE
Что посоветуете?
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
26.05.2010, 22:22
Если это версия
dev001, то удали 9 строчку в файле treenode.h
0
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
26.05.2010, 23:13
kazak
Если предыдущее сообщение было адресованно мне, то я получу очень много ошибок:
Bash
1
2
3
4
5
6
treenode.h:10:error: `Tree` is not a template
treenode.h: In instantiation of `TreeNode<int>`:
tree.h:39: instantiated from `void Tree<NODETYPE>::insertNodeHelper<TreeNode<NODETYPE>**, const NODETYPE &> [with NODETYPE = int]`
tree.h:32: instantiated from `void Tree<NODETYPE>::insertNode<const NODETYPE&> [with NODETYPE = int]`
main.cpp:14: instantiated from here
treenode.h:8: error: template argument required for `struct Tree`
0
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
27.05.2010, 10:49
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
//TreeNODE.H Определение класса TreeNode
#ifndef _TREENODE_H
#define _TREENODE_H
 
template<class NODETYPE> 
class TreeNode
{
public:
    TreeNode(const NODETYPE &);
    NODETYPE getData() const;
public:
    TreeNode *leftPtr;
    NODETYPE data;
    TreeNode *rightPtr;
};
template<class NODETYPE>
TreeNode<NODETYPE>::TreeNode (const NODETYPE &d)
{
   data=d;
   leftPtr=rightPtr=0;
}
template<class NODETYPE>
NODETYPE TreeNode<NODETYPE>::getData() const
{return data;}
#endif
первый приведенный собирался на MS Visual C++, сейчас приведенный код собирался под WIN32 в MINGW32, g++ -otest main.cpp небыло вообще ошибок,
Собирался в CygWin-е тоже самое ошибок нет
Собирался на Ubuntu 9.10 ошибок 0
Собирался на FreeBSD 7 ошибок 0

friend там на сколько я понял использовался для private поле, чтобы

C++
1
2
3
TreeNode *leftPtr;
NODETYPE data;
TreeNode *rightPtr;
можно было в Tree классе юзать, так как оригинала я не видел, то исправлял коряво переписанный класс
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.05.2010, 10:56
Цитата Сообщение от Анна :) Посмотреть сообщение
C++
1
2
#ifdef TREENODE_H 
#define TREENODE_H
C++
1
2
#ifdef TREE_H 
#define TREE_H
И там и там одна и та же ошибка. Правильно
C++
1
2
#ifndef TREENODE_H
#define TREENODE_H
C++
1
2
#ifndef TREE_H
#define TREE_H
а то получается: Если TREENODE_H определено, определить его ещё раз, а если нет, то пропустить всё до #endif
0
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
27.05.2010, 10:56
если компилите на gcc тогда можно вот так попробывать (с приват полями)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
emplate<class NODETYPE> class Tree;
template<class NODETYPE> 
class TreeNode
{
    friend class Tree<NODETYPE>;
public:
    TreeNode(const NODETYPE &);
    NODETYPE getData() const;
private:
    TreeNode *leftPtr;
    NODETYPE data;
    TreeNode *rightPtr;
};
template<class NODETYPE>
TreeNode<NODETYPE>::TreeNode (const NODETYPE &d)
{
   data=d;
   leftPtr=rightPtr=0;
}
template<class NODETYPE>
NODETYPE TreeNode<NODETYPE>::getData() const
{return data;}
1
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
27.05.2010, 13:03
dev001
Спасибо! Все сделал заработало отлично)
Только я скачал с сайта автора сорцы к последнему изданию книги, так там:
C++
1
template <typename NODETYPE> class Tree;
есть ли разница typename с class?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2010, 13:03
Помогаю со студенческими работами здесь

Симметрический обход дерева
Кто знает - симметрический обход дерева - это тоже самое что и сортировка? Получается так.

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

Обход бинарного дерева
может есть у кого такой пример или похожий??или часть какая нибудь?

Обход бинарного дерева С++
Нужна помощь! Просмотрел много источников, но так и не нашёл своего ответа...Суть задачи состоит в том что, мне нужно при обходе...

Обход бинарного дерева
Прошу Вас, помогите школьнику, незнающему деревья, завтра срочно надо сдать работу, я никак не могу реализовать... 1. В заданном...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru