Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/53: Рейтинг темы: голосов - 53, средняя оценка - 4.60
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
1

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

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

Привет всем!
Мне надо в курсовой работе написать программу, которая строит бинарное дерево (по вводимым значениям) и потом обходит это дерево в прямом(корень->левое поддерево->правое поддерево), обратном(левое поддерево->правое поддерево->корень) и симметрическом (левое поддерево->корень->правое поддерево)порядке. Как это все сделать, я не знаю вообще =(( Позарез надо(( Вся надежда на вас

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2010, 22:31
Ответы с готовыми решениями:

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

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

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

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

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

20
dyosick
62 / 62 / 17
Регистрация: 25.08.2008
Сообщений: 178
18.05.2010, 23:01 2
Не поленись и найди книгу Х.М.Дейтел,П.Дж.Дейтел "Как программировать на С++", 5-ое издание. Глава 20 "Структуры данных", раздел 20.7 "Деревья".
Там весь код, что тебе нужен.
Желаю удачи!
1
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
18.05.2010, 23:21  [ТС] 3
Спасибо! Буду разбираться.
0
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 08:29  [ТС] 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
#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
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
24.05.2010, 08:51 5
Цитата Сообщение от Анна :) Посмотреть сообщение
//TREENODE.H Определение класса TreeNode
может надо так.)
0
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 09:07  [ТС] 6
Такую же ошибку выдает :-(
0
kazak
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
24.05.2010, 09:09 7
Ладно, зайдем с другой стороны.
Как ты назвала файл с классом? Или ты все это записала в один файл?
0
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
24.05.2010, 09:13  [ТС] 8
В один файл Как в книжке было написано, так все и переписала))
0
kazak
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
24.05.2010, 09:23 9
В книжке немного по другому было написано.
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  [ТС] 10
У меня опять какие-то ошибки полезли!! Кто-нибудь может у себя запустить этот код? ((((
0
kazak
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
24.05.2010, 18:24 11
Про ошибки по подробней.
0
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
25.05.2010, 18:44  [ТС] 12
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
dev001
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
25.05.2010, 19:54 13
создать файл 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
lispik
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
26.05.2010, 22:16 14
Добрый день, уважаемые форумчане!
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
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
26.05.2010, 22:22 15
Если это версия
dev001, то удали 9 строчку в файле treenode.h
0
lispik
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
26.05.2010, 23:13 16
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
dev001
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
27.05.2010, 10:49 17
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
easybudda
Модератор
Эксперт CЭксперт С++
10148 / 6055 / 1522
Регистрация: 25.07.2009
Сообщений: 11,476
27.05.2010, 10:56 18
Цитата Сообщение от Анна :) Посмотреть сообщение
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
dev001
36 / 36 / 8
Регистрация: 13.05.2010
Сообщений: 70
27.05.2010, 10:56 19
если компилите на 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
lispik
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 7
27.05.2010, 13:03 20
dev001
Спасибо! Все сделал заработало отлично)
Только я скачал с сайта автора сорцы к последнему изданию книги, так там:
C++
1
template <typename NODETYPE> class Tree;
есть ли разница typename с class?
0
27.05.2010, 13:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 13:03

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

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

Обход Бинарного дерева
Задача: написать функцию, помощью которой можно получить n-тый элемент...


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

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

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