Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <fstream>
- #include <iostream>
- #include <deque>
- #include <iomanip>
- #include <queue> // std::queue
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <sstream>
- #include <vector>
- #include "BinaryTree.h"
- ;using namespace std;
- //BinaryTree::BinaryTree(){ //Конструктор
- //}
- void BinaryTree::printLevelOrder(BinaryTree *root) {
- if (!root) return;
- queue<BinaryTree*> nodesQueue;
- int nodesInCurrentLevel = 1;
- int nodesInNextLevel = 0;
- nodesQueue.push(root);
- while (!nodesQueue.empty()) {
- BinaryTree *currNode = nodesQueue.front();
- nodesQueue.pop();
- nodesInCurrentLevel--;
- if (currNode) {
- cout << currNode->data << " ";
- nodesQueue.push(currNode->left);
- nodesQueue.push(currNode->right);
- nodesInNextLevel += 2;
- }
- if (nodesInCurrentLevel == 0) {
- cout << endl;
- nodesInCurrentLevel = nodesInNextLevel;
- nodesInNextLevel = 0;
- }
- }
- }
- void BinaryTree::add_node(BinaryTree *tree, vector<int> str1,BinaryTree *child){
- for(int i=0;i<str1.size();i++){
- bool p1=false,p2=false;
- if(tree->data==str1[i]){
- i++;
- if (tree->right!=NULL){if(str1[i]==tree->right->data){child=tree->right; p1=true;}}else
- if (tree->left!=NULL){if(str1[i]==tree->left->data){child=tree->left; p2=true;}}
- }
- if(((p1==false)&&(p2==false))){
- if (tree->right==NULL){child=tree->right; p1=true;}else
- if ((tree->left==NULL)&&(tree->right->data!=str1[i])){child=tree-> left; p2=true;}
- if (tree->right!=NULL){if(str1[i]==tree->right->data){child=tree->right; p1=true;}}//else{
- if (tree->left!=NULL){if(str1[i]==tree->left->data){child=tree->left; p2=true;}}//}
- }
- if(child==NULL){
- BinaryTree *child= new BinaryTree;
- child->data=str1[i];
- child->left=NULL;
- child->right=NULL;
- if(p1) tree->right=child;
- if(p2) tree->left=child;
- cout<<endl;
- cout<<child->data<<endl;
- tree=child;
- }else {
- if(p1) tree->right=child;
- if(p2) tree->left=child;
- tree=child;
- }
- }
- }
- BinaryTree BinaryTree::search(BinaryTree *tree, int find){
- if ((tree!=NULL)||(tree->data!=find)) //Пока не встретится пустое звено
- {
- search(tree->left, find); //Рекурсивная функция для вывода левого поддерева
- search(tree->right,find); //Рекурсивная функци для вывода правого поддерева
- } else return(*tree);
- }
- void BinaryTree::add_tree(BinaryTree *root){
- char answer='y';
- int a=0, list=0;
- std::vector<int> massiv;
- //cout<<"kuda prisoedinit podderevo?"<<endl;
- //cin>>list;
- //*root=search(root,list);
- while(answer=='y'){
- BinaryTree *current_node=NULL;
- string str1;
- cout<<"vvedite vetv' poddereva:"<<endl;
- getline(cin,str1);
- cout<<str1;
- for (int i=0; i<str1.length(); i++){
- stringstream ss;
- if(str1[i]!=' '){
- ss << str1[i];
- ss >> a;
- massiv.push_back(a);
- }
- ss.str( std::string() );
- ss.clear();
- }
- current_node->add_node(root,massiv);
- massiv.clear();
- cout<<endl;
- current_node=root;
- cout<<"vvesti vetv?"<<endl;
- cin>>answer;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement