Advertisement
Phoenix_x

Untitled

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