Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<istream>
- #include<fstream>
- #include <string>
- #include<iostream>
- #include <sstream>
- using namespace std;
- struct TreeElem
- {
- double info; //info - Число, которое я буду записывать в дерево
- TreeElem *left, *right; //Адресные поля. Адрес левой части и Адрес правой части
- };
- void PrintTree(TreeElem *root) //Функция обхода
- {
- if (root) //Пока не встретится пустое звено
- {
- cout << root->info << " "; //Отображаем корень дерева
- PrintTree(root->left); //Рекурсивная функция для вывода левого поддерева
- PrintTree(root->right); //Рекурсивная функци для вывода правого поддерева
- }
- }
- void AddElem(TreeElem *&root, int i) //Функция добавления звена в дерево
- {
- if (!root)
- {
- root = new TreeElem; //Выделяем память под звено дерева
- root->info = i; //Записываем данные в звено
- root->left = root->right = 0; //Подзвенья инициализируем пустотой во избежание ошибок
- return;
- }
- if (i<root->info) AddElem(root->left, i);
- if (i>root->info) AddElem(root->right, i);
- else return;
- }
- void DelTree(TreeElem*& root){
- if (!root)
- return;
- DelTree(root->left);
- DelTree(root->right);
- delete root;
- root=0;
- }
- TreeElem* Make(istream& in, int curspaces, string& str){
- TreeElem* root = 0;
- root = new TreeElem;
- std::stringstream ss;
- ss << str;
- ss >> root->info;
- root->left = 0;
- root->right = 0;
- getline(in, str);
- int count = 0;
- char a = str[0];
- for (int i = 0; i<str.length() && str[i] == ' '; ++i){
- count++;
- }
- if (count > curspaces){
- root->left = Make(in, count, str);
- int count2 = 0;
- for (int i = 0; i<str.length() && str[i] == ' '; ++i){
- count2++;
- }
- if (count2 > curspaces){
- root->right = Make(in, count, str);
- }
- return root;
- }
- else if (count == curspaces){
- return root;
- }
- else {//count < spaces
- return root;
- }
- }
- TreeElem* MakeTreeFromFile(string FileName){
- ifstream name(FileName.c_str());
- TreeElem* root = 0;
- string str = "";
- getline(name, str);
- int count = 0;
- for (int i = 0; i<str.length() && str[i] == ' '; ++i){
- count++;
- }
- root = Make(name, count, str);
- return root;
- }
- int NodeCount(TreeElem * root)
- {
- if (root->left == 0 && root->right == 0)
- return 1;
- int l, r;
- if (root->left != 0)
- l = NodeCount(root->left);
- else
- l = 0;
- if (root->right != 0)
- r = NodeCount(root->right);
- else
- r = 0;
- return l+r+1;
- }
- int HeightOfTree(TreeElem * root)
- {
- if(root == 0)
- return 0;
- int l, r;
- if (root->left != 0) {
- l = HeightOfTree(root->left);
- }else
- l = -1;
- if (root->right != 0) {
- r = HeightOfTree(root->right);
- }else
- r = -1;
- int max = l > r ? l : r;
- return max+1;
- }
- void PrintTreeLvl(TreeElem * root,int level)
- {
- if(!level)
- {
- cout << root->info;
- }
- PrintTreeLvl(root->left,level++ );
- PrintTreeLvl(root->right,level++ );
- }
- void PrintChain(TreeElem * root,int x){
- if(!root) return 0;
- if (root->info==x) return 1;
- z;
- }
- int main(int argc, char** argv) {
- /*
- char* FileName= "1.txt";
- TreeElem *Tree=0;
- for (int i=0;i<5;i++) {AddElem(Tree,i);}
- PrintTree(Tree); //Вызов функции обхода дерева;
- cin.get(); //Обычная задержка перед выходом;
- */
- string FileName = "1.txt";
- TreeElem *Tree = 0;
- Tree = MakeTreeFromFile(FileName);
- PrintTree(Tree); //Вызов функции обхода дерева;
- int count = NodeCount(Tree);
- cout<<"The number of nodes " << count<<endl;
- int hght = HeightOfTree(Tree);
- cout <<"Height of Tree " << hght<<endl;
- DelTree(Tree);
- cout <<"Enter the lvl"<<endl;
- int level;
- cin>> level;
- PrintTreeLvl(Tree,level);
- //return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement