Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите написать программу на си ++

Addk Знаток (256), открыт 2 недели назад
Программа должна осуществлять заполнение дерева с клавиатуры, вывод на экран исходного дерева, выполнение действий согласно варианту, вывод на экран результата.
Каждый узел дерева должен содержать следующую информацию: ключевое поле (целое число), информационное поле, указатели на левого и правого потомков.
7. Описать процедуру, которая:
a) присваивает переменной b типа char значение:
К - если вершина - корень,
П - если вершина - промежуточная вершина,
Л - если вершина - лист;
b) распечатывает атрибуты всех вершин дерева
• без использования механизма классов (на основе типа данных «структура»)
4 ответа
Геннадий Антонов Профи (585) 2 недели назад
#include <iostream>

struct Node {
int key;
std::string info;
Node* left;
Node* right;
};

Node* createNode(int key, const std::string& info) {
Node* newNode = new Node();
newNode->key = key;
newNode->info = info;
newNode->left = nullptr;
newNode->right = nullptr;
return newNode;
}

void insertNode(Node*& root, int key, const std::string& info) {
if (root == nullptr) {
root = createNode(key, info);
} else {
if (key < root->key) {
insertNode(root->left, key, info);
} else {
insertNode(root->right, key, info);
}
}
}

void printTree(Node* root, int depth = 0) {
if (root == nullptr) {
return;
}
printTree(root->right, depth + 1);
for (int i = 0; i < depth; i++) {
std::cout << " ";
}
std::cout << root->key << " (" << root->info << ")\n";
printTree(root->left, depth + 1);
}

char getNodeType(Node* root, Node* node) {
if (root == node) {
return 'К'; // Корень
} else if (node->left == nullptr && node->right == nullptr) {
return 'Л'; // Лист
} else {
return 'П'; // Промежуточная вершина
}
}

void printNodeAttributes(Node* root, Node* node) {
if (node == nullptr) {
return;
}
printNodeAttributes(root, node->left);
printNodeAttributes(root, node->right);

char b = getNodeType(root, node);
std::cout << "Вершина: " << node->key << ", Информация: " << node->info << ", Тип: " << b << '\n';
}

int main() {
Node* root = nullptr;

int numNodes;
std::cout << "Введите количество узлов: ";
std::cin >> numNodes;

for (int i = 0; i < numNodes; i++) {
int key;
std::string info;
std::cout << "Введите ключ узла и информацию: ";
std::cin >> key >> info;
insertNode(root, key, info);
}

std::cout << "\nИсходное дерево:\n";
printTree(root);

std::cout << "\nАтрибуты всех вершин дерева:\n";
printNodeAttributes(root, root);

return 0;
}
Рустам Абдрашитов Мыслитель (9508) 2 недели назад
на
 #include <iostream> 
#include <string>

using namespace std;

struct Node {
int key;
string info;
Node* left = nullptr;
Node* right = nullptr;

Node(int k, const string& i) : key(k), info(i) {}
};

Node* insert(Node* root, int key, const string& info) {
if (!root) return new Node(key, info);
if (key < root->key) root->left = insert(root->left, key, info);
else root->right = insert(root->right, key, info);
return root;
}

void printNodeAttributes(Node* node) {
if (!node) return;
cout << "Ключ: " << node->key
<< ", Информация: " << node->info
<< ", Тип: " << ((node->left || node->right) ? 'П' : 'Л') << endl;
printNodeAttributes(node->left);
printNodeAttributes(node->right);
}

int main() {
Node* root = nullptr;
int n;
cout << "Введите количество узлов дерева: ";
cin >> n;

for (int i = 0; i < n; ++i) {
int key;
string info;
cout << "Введите ключ и информацию для узла " << i + 1 << ": ";
cin >> key >> info;
root = insert(root, key, info);
}

cout << "\nАтрибуты всех вершин дерева:\n";
printNodeAttributes(root);

return 0;
}
Похожие вопросы