Phoenix_x

Untitled

Apr 20th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct elem { //структура на дървото
  7.     int key;  //стойност на елемента
  8.     elem* left; // ляво поддърво
  9.     elem* right; //дясно поддърво
  10.     bool printed = false; //дали елемента е принтиран
  11. } *root = NULL; // инициализация на корена
  12.  
  13.  
  14. void obhozdane(elem *t);
  15. void add(int n, elem *&t);
  16.  
  17. void main()
  18. {
  19.     int broj;
  20.     cout << "Broj elementi: ";
  21.     cin >> broj;
  22.  
  23.     while (broj < 1) { //ако потребителя въведе число по-малко от 1 за брой, накарай го да въвежда пак число
  24.         cout << "Nevaliden broj" << endl;
  25.         cout << "Broj elementi: ";
  26.         cin >> broj;
  27.     }
  28.  
  29.     int number; //елемент на дървото
  30.     cout << "Vavedete elementi: " << endl;
  31.  
  32.     for (int i = 0; i < broj; i++)
  33.     {
  34.         cin >> number;
  35.         add(number, root);
  36.     }
  37.  
  38.     obhozdane(root);
  39. }
  40.  
  41.  
  42. //obhozdane prav red - корен, lqvo poddarvo dqsno poddarvo
  43. void obhozdane(elem *t) //t -  цялото дърво или поддърво
  44. {
  45.     if (t)
  46.     {
  47.         obhozdane(t->left);
  48.         obhozdane(t->right);
  49.  
  50.         if (t->left != NULL && t->left->left == NULL && t->printed == false) { //върха преди листо, за лявата страна
  51.             cout << t->key << "\t";
  52.             t->printed = true;
  53.         }
  54.         if (t->right != NULL && t->right->right == NULL && t->printed == false) { //върха преди листо, за дясната страна
  55.             cout << t->key << "\t";
  56.             t->printed = true;
  57.         }
  58.     }
  59. }
  60.  
  61. void add(int n, elem *&t)
  62. {
  63.     if (t == NULL) //в случай, че дървото няма елементи, или е след листо
  64.     {
  65.         t = new elem;
  66.         t->key = n;
  67.         t->left = t->right = NULL;
  68.     }
  69.     else
  70.     {
  71.         if (t->key < n) //ако е по-голямо от върха, сложи го от дясно
  72.         {
  73.             add(n, t->right);
  74.         }
  75.         else //ако е по-малко от върха, сложи го от дясно
  76.         {
  77.             add(n, t->left);
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment