В задании по созданию бинарного дерева есть условие на то, что узлов в дереве должно быть не больше 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; }
|
|