Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 2
Регистрация: 12.04.2014
Сообщений: 102
1

Классы "Бинарное дерево" и "Узел" в одном приложении

14.05.2015, 01:08. Показов 686. Ответов 1
Метки нет (Все метки)

Компилятор разбушевался((( Пробовала сделать вместо одного класса два класса(Дерево и узел). Сделала один класс дружественный другому. Но видно, что компилатор ругается на:
key: не является членом "Tree"
Так же уверенна, что напортачила с параметрами в функциями. Может кто-то поможет? Сталкиваюсь с бинарным деревом впервые, да и знания на заочке никакие.
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
//TreeNode.h
#pragma once
#ifndef __TREENODE_H__
#define __TREENODE_H__
#include <iomanip>
#include <string>
 
class Tree //Дерево
{
private:
    Node *root;
    void cleanup( Node *node );
    public:
    Tree(){};
    ~Tree() {};
    void add( Node *node );
    void show(Tree *&MyTree);
    void add_node(int x,std::string p,Tree *&MyTree);
    friend bool is_palindrome(const std::string &stroka);
};
 
class Node//Узел
{
private:
    Node *leftPtr, *rightPtr;
public:
    int key; 
    std::string polinom;
    Node(){};//конструктор
    Node( int k, const std::string &p){};//конструктор с параментами
    ~Node(){}; //деструктор
    friend class Tree;
};
 
 
#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
91
92
//TreeNode.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <iomanip>
#include <cctype>
#include "TreeNode.h"
 
 
  Tree::Tree() : root(0) {}
  Tree::~Tree() { cleanup( root );}
  Node::Node() : key(0), leftPtr(0), rightPtr(0) {}
  Node::Node( int k, const std::string &p) : key(k), polinom(p), leftPtr(0), rightPtr(0) {}
  Node::~Node() { leftPtr = rightPtr = 0; }
 
 
void Tree::show(Tree *&MyTree) //Функция обхода
{   if (MyTree!=NULL) 
{
    show(MyTree->leftPtr);
    std::cout<<MyTree->key; 
    std::cout<<" ";
    std::cout<<MyTree->polinom;
    std::cout<<"\n"; 
    show(MyTree->rightPtr); 
}
}
void Tree::add_node(int x,std::string p,Tree *&MyTree) //Функция добавления звена в дерево
{static int count=1;
if(count<=10)
{if (NULL==MyTree)  //если дерево пустое
{
    MyTree=new Tree(); 
    MyTree->key=x;
    MyTree->polinom=p;
    MyTree->leftPtr=MyTree->rightPtr=NULL;
    count++;
}
if (x<MyTree->key)   
{   if (MyTree->leftPtr!=NULL) add_node(x,p,MyTree->leftPtr); 
else 
{
    MyTree->leftPtr=new Tree;  
    MyTree->leftPtr->leftPtr=MyTree->leftPtr->rightPtr=NULL; 
    MyTree->leftPtr->key=x;
    MyTree->leftPtr->polinom=p;
    count++;
}
}
if (x>MyTree->key)   
{
    if (MyTree->rightPtr!=NULL) add_node(x,p,MyTree->rightPtr); 
    else 
    {
        MyTree->rightPtr=new Tree;  
        MyTree->rightPtr->leftPtr=MyTree->rightPtr->rightPtr=NULL; 
        MyTree->rightPtr->key=x; 
        MyTree->rightPtr->polinom=p; 
        count++;
    }
}
if (MyTree->key == key) // если ключ повторяется
{ 
    MyTree->key = key;
    MyTree->polinom = p;
}
}
}
bool is_palindrome(const std::string &stroka)
{
    for (size_t i = 0; i < stroka.length()/2; ++i)
    {
        if (tolower(stroka[i]) != tolower(stroka[stroka.length() - i - 1]))
            return false;
    }
    return true;
}
 
 
  void Tree::cleanup (Node *node) // Удаление всех узлов дерева в обходе с отложенной выборкой
  { if(!node) return;
     if(node->leftPtr)
             { cleanup(node->leftPtr);
       node->leftPtr = 0;
    }
    if(node->rightPtr != 0 )
    { cleanup(node->rightPtr);
       node->rightPtr = 0;
    }
    delete node;
  }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 01:08
Ответы с готовыми решениями:

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

1
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
14.05.2015, 04:34 2
C++
1
2
3
4
class Node;
 
class Tree //Дерево
{...
Или Node помести выше Tree. Убери реализации методов из TreeNode.h (оставь только прототипы), реализации есть в TreeNode.cpp.

Добавлено через 10 минут
В методах, куда передаётся ссылка на указатель на Tree (show() и т.п): нет у Tree полей key, polinom и пр., это поля Node, а в Tree есть указатель на Node - root, поэтому не
C++
1
std::cout << MyTree ->key;
, а:
C++
1
std::cout << MyTree ->root ->key;
и т.д.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 04:34

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

Базовый класс "Изделие" и производные классы "Мышь", "Клавиатура", "Монитор"
/*Создать класс изделие, с полями себестоимость, цена, время выполнения, стоимость нормочаса и...

Связать отношением наследования классы "Место", "Область", "Город", "Мегаполис"
Для определения иерархии классов связать отношением наследования классы, приведенные в приложении...

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: ...

Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат"
Реализовать класс Графический объект от которого будут наследоваться классы &quot;круг&quot; и &quot;квадрат&quot;....

Создать базовый класс "Животные" и производные классы "кошки" и "собаки"
Создать базовый класс &quot;Животные&quot;. Создать производные классы кошки и собаки. Поля класса с уровнем...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор"
Дали задачу по программированию: составить класс &quot;Источник напряжения&quot;, для которого нужно...


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

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

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