Бинарное дерево, заполнение элементами из массива и вывод на экран корня дерева, элементов идущих по левым ветвям, начиная с корня
Создать бинарное дерево на языке программирования С++ и случайным образом заполнить его значениями из массива mass[4,14,5,76,1,9,13,66]. Вывести на экран корень дерева и вывести на экран все элементы дерева идущие по левым ветвям, начиная с корня. Помогите понять что не так, что нужно исправить (вместо элементов дерева идущим по левым ветвям, программа выводит на экран "1" )
#include <iostream>
#include <cstdlib>
#define NULL 0
using namespace std;
struct Node {
int value;
Node* left;
Node* right;
};
Node* createNode(int value) {
Node* node = new Node;
node->value = value;
node->left = NULL;
node->right = NULL;
return node;
}
void addNode(Node*& root, int value) {
if (root == NULL) {
root = createNode(value);
}
else if (value < root->value)
{
addNode(root->left, value);
}
else {
addNode(root->right, value);
}
}
void printLeftNodes(Node* root) {
if (root == NULL) {
return;
}
cout << root->value << " ";
if (root->left != NULL) {
printLeftNodes(root->left);
}
}
int main() {
int mass[] = { 4, 14, 5, 76, 1, 9, 13, 66 };
int size = sizeof(mass) / sizeof(int);
Node* root = NULL;
for (int i = 0; i < size; i++)
{
addNode(root, mass[i]);
}
cout << "Корень дерева: " << root->value << endl;
cout << "Элементы дерева, идущие по левым ветвям, начиная с корня: ";
printLeftNodes(root->left);
cout << endl;
return 0;
}
Ответы (2 шт):
#include <iostream>
#include <cstdlib>
using namespace std;
struct Node {
int value;
Node *left;
Node *right;
Node(int val) {
value = val;
left = NULL;
right = NULL;
}
};
void insert(Node* &root, int value) {
if (root == NULL) {
root = new Node(value);
}
else {
if (value < root->value) {
insert(root->left, value);
}
else {
insert(root->right, value);
}
}
}
void print(Node* root) {
if (root != NULL) {
print(root->left);
cout << root->value << " ";
print(root->right);
}
}
int main() {
int mass[] = {4, 14, 5, 76, 1, 9, 13, 66};
int n = sizeof(mass)/sizeof(mass[0]);
Node* root = NULL;
for (int i = 0; i < n; i++) {
insert(root, mass[i]);
}
print(root);
return 0;
}
Программа выводит на экран "1", потому что в функции printLeftNodes, после вывода значения корня, проверяется только левый потомок текущего узла, но не обрабатывается правый потомок. В результате, если корень имеет правого потомка, то программа не сможет вывести его значение.
Чтобы исправить это, нужно добавить также вызов printLeftNodes для правого потомка:
void printLeftNodes(Node* root) {
if (root == NULL) {
return;
}
cout << root->value << " ";
if (root->left != NULL) {
printLeftNodes(root->left);
}
if (root->right != NULL) {
printLeftNodes(root->right);
}
}
Теперь программа будет выводить на экран все элементы дерева, идущие по левым ветвям, начиная с корня.