Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничение на количество узлов в дереве 
V
    Опции темы
lenarano
Дата 12.5.2015, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 17.4.2014

Репутация: нет
Всего: нет



В задании по созданию бинарного дерева есть условие на то, что узлов в дереве должно быть не больше 10. Пробую поставить такое ограничение в функции add_node с помощью счетчика и условия, что добавлять новые звенья нужно только до 10. Ранее да того как начала работать над ограничением на размер выводилось все из файлов). Сейчас, если использую  while(count<=10), то выводится в файл только 1 ключ и строка. Если использую if(count<= 10), то выводится все из файлов без какого-либо ограничения и счетчик опять всегда равен 1. Что я делаю не так? Как правильно реализовать условие?

Код

//TreeNode.h
#pragma once
#ifndef __TREENODE_H__
#define __TREENODE_H__
#include <iomanip>
#include <string>


class TreeNode //Звено дерева
{  private:
    int key; //Ключ
    std::string polinom;//Строку записываем
    TreeNode *leftPtr,*rightPtr;
    public:
   void show(TreeNode *&Tree);
   void add_node(int x,std::string p,TreeNode *&MyTree);
   bool is_palindrome(const std::string &word);
};
#endif




Код

//TreeNode.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <iomanip>
#include <cctype>
#include "TreeNode.h"




void TreeNode::show(TreeNode *&Tree) //Функция обхода
{  
    {if (Tree!=NULL) 
    {
        show(Tree->leftPtr);
        std::cout<<Tree->key; 
        std::cout<<" ";
        std::cout<<Tree->polinom;
        std::cout<<"\n"; 
        show(Tree->rightPtr); 
    }
    }
}
void TreeNode::add_node(int x,std::string p,TreeNode *&MyTree) //Функция добавления звена в дерево
{  
    int count=0;
    if(count<=10)
    {if (NULL==MyTree)  
    {
        MyTree=new TreeNode; 
        MyTree->key=x;
        MyTree->polinom=p;
        MyTree->leftPtr=MyTree->rightPtr=NULL;
        count++;
        std::cout <<count;
    }

    if (x<MyTree->key)   
    {
        if (MyTree->leftPtr!=NULL) add_node(x,p,MyTree->leftPtr); 
        else 
        {
            MyTree->leftPtr=new TreeNode;  
            MyTree->leftPtr->leftPtr=MyTree->leftPtr->rightPtr=NULL; 
            MyTree->leftPtr->key=x;
            MyTree->leftPtr->polinom=p;
            count++;
            std::cout <<count;
        }
    }

    if (x>MyTree->key)   
    {
        if (MyTree->rightPtr!=NULL) add_node(x,p,MyTree->rightPtr); 
        else 
        {
            MyTree->rightPtr=new TreeNode;  
            MyTree->rightPtr->leftPtr=MyTree->rightPtr->rightPtr=NULL; 
            MyTree->rightPtr->key=x; 
            MyTree->rightPtr->polinom=p; 
            count++;
            std::cout <<count;
        }
    }
    }
}

bool TreeNode::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;
}







Код

//KodTreeNode.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <iomanip>
#include "TreeNode.h"


int main()
{  SetConsoleCP(1251);
SetConsoleOutputCP(1251);

TreeNode *Tree=NULL;  
TreeNode Derevo;
std::ifstream imput_fail_key;
std::ifstream imput_fail_stroki;
imput_fail_key.open("key.txt", std::ios::in);
imput_fail_stroki.open("stroki.txt", std::ios::in);
if (!imput_fail_key.is_open()||!imput_fail_stroki.is_open()) // если файл не открыт
    std::cout << "Файл не может быть открыт!\n"; // сообщить об этом
std::cout << "Вывод содержимого файла key.txt и файла stroki.txt. \n";
while(!imput_fail_key.eof()&&!imput_fail_stroki.eof())
{   int k;
std::string line;
imput_fail_key>> k; // считали число из файла
getline(imput_fail_stroki, line);// считали строку из файла
std::cout << k << " " <<line<< std::endl;// напечатали это число и слово
Derevo.add_node(k, line.substr(0, 20), Tree);//возвращает 20 символов строки line начиная с позиции 0
}
std::cout << std::endl;
std::cout << "Исходное дерево:\n";
imput_fail_key.close();
imput_fail_stroki.close();
Derevo.show(Tree); 
std::cout << "Реализуем функцию, которая оставит в дереве только полиндромы:\n";
/*(до тех пор пока встречаются строки в TreeNode.polinom)
if(is_palindrome.polinom возвращает 1)
    оставляем в дереве
else (удаляем)
Вывод дерева.*/

std::cin.get();
return 0;
}  

PM MAIL   Вверх
feodorv
Дата 12.5.2015, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(lenarano @  12.5.2015,  16:19 Найти цитируемый пост)
с помощью счетчика

Счетчик-то у Вас локальный. Что толку объявить в функции добавления
Цитата(lenarano @  12.5.2015,  16:19 Найти цитируемый пост)
    int count=0;

При вызове add_node у Вас всегда будет count равняться 0, вне зависимости от предыдущих вызовов этой функции. Вы бы уж определили бы count как static, а ещё лучше ввели static переменную в самом классе TreeNode, например.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.