Вывести элементы самой длинной ветви бинарного дерева - 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;   
        }
    } 
}

Объяснение кода листинга программы

В данном коде реализована рекурсивная функция для определения высоты бинарного дерева.

  1. Если переданный в функцию указатель на узел равен NULL, то возвращается 0, так как дерево с пустым узлом имеет нулевую высоту.
  2. В противном случае вызывается функция для левого и правого поддеревьев от данного узла.
  3. Полученные значения высоты поддеревьев сравниваются.
  4. Если высота левого поддерева больше высоты правого, то возвращается увеличенное на 1 значение высоты левого поддерева.
  5. В противном случае возвращается увеличенное на 1 значение высоты правого поддерева. Функция предназначена для работы с неориентированным бинарным деревом, так как не содержит операций по сохранению порядка обхода узлов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы