Вывести элементы самой длинной ветви бинарного дерева - C (СИ)
Формулировка задачи:
вот есть реализация дерева:
нужно выветси в консоль элементы самой длинной ветви дерева.
помогите пожалуйста, может у кого-то код готовый есть...
#include <stdio.h> #include <stdlib.h> #include <alloc.h> /* Структура, описывающая узел дерева */ typedef struct item { int data; struct item *left; struct item *right; } Item; void AddNode(int data, Item **node); void LeftOrder(Item *node); void main(void) { char buffer[128]; int i; Item *root = NULL; /* корень дерева */ FILE *fp = fopen("ex52.txt", "r"); if (!fp) exit(1); /* выйти, если файл не удалось открыть */ /* Считываем значения из файла построчно */ while (fgets(buffer, 128, fp) != NULL) AddNode(atoi(buffer), &root); /* и добавляем в дерево */ LeftOrder(root); fclose(fp); } /* Добавить узел в бинарное дерево поиска */ void AddNode(int data, Item **node) { if (*node == NULL) { *node = (Item *)calloc(1, sizeof(Item)); (*node)->data = data; (*node)->left = (*node)->right = NULL; } else { if (data < (*node)->data) AddNode(data, &(*node)->left); else if (data > (*node)->data) AddNode(data, &(*node)->right); else puts("There is such element in the tree"); } } /* Обход дерева слева (вывод по возрастанию) */ void LeftOrder(Item *node) { if (node->left) LeftOrder(node->left); printf("%d ", node->data); if (node->right) LeftOrder(node->right); }
Решение задачи: «Вывести элементы самой длинной ветви бинарного дерева»
textual
Листинг программы
int height(NodePtr root) { int lheight, rheight; if(root == NULL) { return 0; } else { lheight = height(root->l); rheight = height(root->r); if(lheight > rheight) { return ++lheight; } else { return ++rheight; } } }
Объяснение кода листинга программы
В данном коде реализована рекурсивная функция для определения высоты бинарного дерева.
- Если переданный в функцию указатель на узел равен NULL, то возвращается 0, так как дерево с пустым узлом имеет нулевую высоту.
- В противном случае вызывается функция для левого и правого поддеревьев от данного узла.
- Полученные значения высоты поддеревьев сравниваются.
- Если высота левого поддерева больше высоты правого, то возвращается увеличенное на 1 значение высоты левого поддерева.
- В противном случае возвращается увеличенное на 1 значение высоты правого поддерева. Функция предназначена для работы с неориентированным бинарным деревом, так как не содержит операций по сохранению порядка обхода узлов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д