Advertisement
Phoenix_x

Untitled

Apr 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 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.  
  12. } *root = NULL; // инициализация на корена
  13.  
  14. int parent = 0;
  15. bool namerenRoditel = false;
  16.  
  17.  
  18. void obhozdane(elem *t);
  19. void add(int n, elem *&t);
  20.  
  21. void main()
  22. {
  23.     int broj;
  24.     cout << "Broj elementi: ";
  25.     cin >> broj;
  26.  
  27.     while (broj < 1) { //ако потребителя въведе число по-малко от 1 за брой, накарай го да въвежда пак число
  28.         cout << "Nevaliden broj" << endl;
  29.         cout << "Broj elementi: ";
  30.         cin >> broj;
  31.     }
  32.  
  33.     int number; //елемент на дървото
  34.     cout << "Vavedete elementi: " << endl;
  35.  
  36.     for (int i = 0; i < broj; i++)
  37.     {
  38.         cin >> number;
  39.         add(number, root);
  40.     }
  41.  
  42.     cout << "Roditel za tarsene:  ";
  43.     cin >> parent;
  44.  
  45.     obhozdane(root);
  46.  
  47.     if (!namerenRoditel) cout << "Nqma roditel sas stojnost" << parent << endl;
  48. }
  49.  
  50.  
  51. //obhozdane prav red - корен, lqvo poddarvo dqsno poddarvo
  52. void obhozdane(elem *t) //t -  цялото дърво или поддърво
  53. {
  54.     if (t)
  55.     {
  56.         if (t->key == parent && (t->left || t->right)) {
  57.             cout << "Nameren e roditel sas stojnost" << parent << endl;
  58.             cout << "*******************" << endl;
  59.             namerenRoditel = true;
  60.  
  61.             if (t->left != NULL)
  62.                 cout << "Lqvo dete: " << t->left->key << endl;
  63.             else
  64.                 cout << "Lqvo dete: " << "Nqma" << endl;
  65.  
  66.             if (t->right != NULL)
  67.                 cout << "Dqsno dete: " << t->right->key << endl;
  68.             else
  69.                 cout << "Dqsno dete: " << "Nqma" << endl;
  70.         }
  71.  
  72.         obhozdane(t->left);
  73.         obhozdane(t->right);
  74.     }
  75. }
  76.  
  77. void add(int n, elem *&t)
  78. {
  79.     if (t == NULL) //в случай, че дървото няма елементи, или е след листо
  80.     {
  81.         t = new elem;
  82.         t->key = n;
  83.         t->left = t->right = NULL;
  84.     }
  85.     else
  86.     {
  87.         if (t->key < n) //ако е по-голямо от върха, сложи го от дясно
  88.         {
  89.             add(n, t->right);
  90.         }
  91.         else //ако е по-малко от върха, сложи го от дясно
  92.         {
  93.             add(n, t->left);
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement