Advertisement
Abe_Matt

Untitled

Dec 8th, 2013
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. #include <string>
  2. #include <fstream>
  3. #include <iostream>
  4. #include <deque>
  5. #include <iomanip>
  6. #include <queue> // std::queue
  7. #include <iostream>
  8. #include <fstream>
  9. #include <string>
  10. #include <sstream>
  11. #include <vector>
  12. #include "BinaryTree.h"
  13.  
  14.  
  15. ;using namespace std;
  16.  
  17. //BinaryTree::BinaryTree(){ //Конструктор
  18.  
  19. //}
  20.  
  21.  
  22. void BinaryTree::printLevelOrder(BinaryTree *root) {
  23. if (!root) return;
  24. queue<BinaryTree*> nodesQueue;
  25. int nodesInCurrentLevel = 1;
  26. int nodesInNextLevel = 0;
  27. nodesQueue.push(root);
  28. while (!nodesQueue.empty()) {
  29. BinaryTree *currNode = nodesQueue.front();
  30. nodesQueue.pop();
  31. nodesInCurrentLevel--;
  32. if (currNode) {
  33. cout << currNode->data << " ";
  34. nodesQueue.push(currNode->left);
  35. nodesQueue.push(currNode->right);
  36. nodesInNextLevel += 2;
  37. }
  38. if (nodesInCurrentLevel == 0) {
  39. cout << endl;
  40. nodesInCurrentLevel = nodesInNextLevel;
  41. nodesInNextLevel = 0;
  42. }
  43. }
  44. }
  45.  
  46.  
  47.  
  48. void BinaryTree::add_node(BinaryTree *tree, vector<int> str1,BinaryTree *child){
  49.  
  50.  
  51.  
  52. for(int i=0;i<str1.size();i++){
  53. bool p1=false,p2=false;
  54. if(tree->data==str1[i]){
  55. i++;
  56. if (tree->right!=NULL){if(str1[i]==tree->right->data){child=tree->right; p1=true;}}else
  57. if (tree->left!=NULL){if(str1[i]==tree->left->data){child=tree->left; p2=true;}}
  58. }
  59. if(((p1==false)&&(p2==false))){
  60. if (tree->right==NULL){child=tree->right; p1=true;}else
  61. if ((tree->left==NULL)&&(tree->right->data!=str1[i])){child=tree-> left; p2=true;}
  62. if (tree->right!=NULL){if(str1[i]==tree->right->data){child=tree->right; p1=true;}}//else{
  63. if (tree->left!=NULL){if(str1[i]==tree->left->data){child=tree->left; p2=true;}}//}
  64.  
  65. }
  66. if(child==NULL){
  67. BinaryTree *child= new BinaryTree;
  68. child->data=str1[i];
  69. child->left=NULL;
  70. child->right=NULL;
  71. if(p1) tree->right=child;
  72. if(p2) tree->left=child;
  73. cout<<endl;
  74. cout<<child->data<<endl;
  75. tree=child;
  76. }else {
  77. if(p1) tree->right=child;
  78. if(p2) tree->left=child;
  79. tree=child;
  80. }
  81. }
  82. }
  83.  
  84. BinaryTree BinaryTree::search(BinaryTree *tree, int find){
  85. if ((tree!=NULL)||(tree->data!=find)) //Пока не встретится пустое звено
  86. {
  87. search(tree->left, find); //Рекурсивная функция для вывода левого поддерева
  88. search(tree->right,find); //Рекурсивная функци для вывода правого поддерева
  89. } else return(*tree);
  90. }
  91.  
  92.  
  93. void BinaryTree::add_tree(BinaryTree *root){
  94. char answer='y';
  95. int a=0, list=0;
  96. std::vector<int> massiv;
  97. //cout<<"kuda prisoedinit podderevo?"<<endl;
  98. //cin>>list;
  99. //*root=search(root,list);
  100. while(answer=='y'){
  101. BinaryTree *current_node=NULL;
  102. string str1;
  103. cout<<"vvedite vetv' poddereva:"<<endl;
  104. getline(cin,str1);
  105. cout<<str1;
  106. for (int i=0; i<str1.length(); i++){
  107. stringstream ss;
  108. if(str1[i]!=' '){
  109. ss << str1[i];
  110. ss >> a;
  111. massiv.push_back(a);
  112. }
  113. ss.str( std::string() );
  114. ss.clear();
  115. }
  116. current_node->add_node(root,massiv);
  117. massiv.clear();
  118. cout<<endl;
  119. current_node=root;
  120. cout<<"vvesti vetv?"<<endl;
  121. cin>>answer;
  122. }
  123. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement