Untitled
unknown
plain_text
2 years ago
2.6 kB
10
Indexable
//Задача 27.Да се състави програма на С/С++, която използва функция за преброяване на всички преки наследници на определен елемент в дадено двоично дърво за търсене.
#include <iostream>
using namespace std;
struct elem{int key;elem *left, *right;}*root = NULL;
void add(int n, elem* &t);
void inorder(elem* t);
void postorder(elem* t);
void preorder(elem* t);
int countChildren(elem* t, int k);
int main() {
int num, ch;
do {
cout << "Menu\n";
cout << "1. Add \n";
cout << "2.inorder\n";
cout << "3. Preorder\n";
cout << "4. Postorder\n";
cout << "5. Count Children\n";
cout << "6. Exit\n";
cout << "Your choice:";
cin >> ch;
switch (ch) {
case 1:
cout << "num=";
cin >> num;
add(num, root);
cout << endl;
break;
case 2:
inorder(root);
cout << endl;
break;
case 3:
preorder(root);
cout << endl;
break;
case 4:
postorder(root);
cout << endl;
break;
case 5:
cout << "Num: ";
cin >> num;
int count = countChildren(root, num);
cout << "Count: " << count << endl;
break;
}
} while (ch != 6);
system("pause");
return 0;
}
void add(int n, elem*& t) {
if (t == NULL) {
t = new elem;
t->key = n;
t->left = t->right = NULL;
}
else {
if (t->key < n) add(n, t->right);
else add(n, t->left);
}
}
void inorder(elem* t) {
if (t) {
inorder(t->left);
cout << t->key << " ";
inorder(t->right);
}
}
void postorder(elem* t) {
if (t) {
postorder(t->left);
postorder(t->right);
cout << t->key << " ";
}
}
void preorder(elem* t) {
if (t) {
cout << t->key << " ";
preorder(t->left);
preorder(t->right);
}
}
int countChildren(elem* t, int k) {
if (t == NULL) return 0;
else
{
if (t->key == k)
{
int count = 0;
if (t->left != NULL) count++;
if (t->right != NULL) count++;
return count;
}
else if (t->key < k) return countChildren(t->right, k);
else return countChildren(t->left, k);
}
}Editor is loading...