Найти максимальный элемент в бинарном дереве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

тип информационного поля int*, найти маскимальный элемент в дереве. (помогите, пожалуйста, нужен конкретный пример, чтобы разобраться)

Решение задачи: «Найти максимальный элемент в бинарном дереве»

textual
Листинг программы
  1. #include <iostream.h>
  2.  
  3. struct Node
  4. {
  5.     int Val;
  6.     Node *Left;
  7.     Node *Right;
  8. };
  9.  
  10. void delTree(Node *root)
  11. {
  12.     if ((root->Left == NULL) && (root->Right == NULL))
  13.         delete root;
  14.     else
  15.         if (root->Left == NULL)
  16.         {
  17.             delete root->Left;
  18.             delete root;
  19.         }
  20.         else
  21.             if (root->Right == NULL)
  22.             {
  23.                 delete root->Right;
  24.                 delete root;
  25.             }
  26.             else
  27.             {
  28.                 delete root->Right;
  29.                 delete root->Left;
  30.                 delete root;
  31.             }
  32. }
  33.  
  34. int min (int a, int b)
  35. {
  36.     return ((a > b) ? b : a);
  37. }
  38.  
  39. int minVal(Node *root)
  40. {
  41.     if ((root->Left == NULL) && (root->Right == NULL))
  42.         return root->Val;
  43.     else
  44.         if (root->Left == NULL)
  45.             return min(root->Val,minVal(root->Right));
  46.         else
  47.             if (root->Right == NULL)
  48.                 return min(root->Val,minVal(root->Left));
  49.             else
  50.                 return min(root->Val,min(minVal(root->Left),minVal(root->Right)));
  51.  
  52. }
  53.  
  54. int main(int argc, char* argv[])
  55. {
  56.     Node *Root,*Curr,*Next;
  57.  
  58.     Root = new Node;
  59.     Root->Left =NULL;
  60.     Root->Right =NULL;
  61.  
  62.     Root->Val=123;
  63.    
  64.     Curr = new Node;
  65.     Curr->Left =NULL;
  66.     Curr->Right =NULL;
  67.     Curr->Val=56;
  68.    
  69.     Root->Left=Curr;
  70.    
  71.     Curr = new Node;
  72.     Curr->Left =NULL;
  73.     Curr->Right =NULL;
  74.     Curr->Val=66;
  75.    
  76.     Root->Right=Curr;
  77.    
  78.     Next = new Node;
  79.     Next->Left =NULL;
  80.     Next->Right =NULL;
  81.     Next->Val=16;
  82.  
  83.     Curr->Right=Next;
  84.  
  85.     cout << minVal(Root) << endl;
  86.  
  87.     delTree(Root);
  88.  
  89.     return 0;
  90. }

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

  1. Структура бинарного дерева реализована в виде динамического массива, элементы которого являются указателями на узлы.
  2. Рекурсивная функция для удаления дерева. Если узел пуст, то его следует удалить. Если узел не пуст, то нужно рекурсивно вызвать функцию для обоих поддеревьев и затем удалить узел.
  3. Рекурсивная функция для поиска минимального значения в дереве. Если узел пуст, то возвращается его значение. Если узел не пуст, то рекурсивно вызывается функция для обоих поддеревьев и затем возвращается минимальное значение.
  4. Создается дерево из 4 узлов.
  5. Рекурсивно вызывается функция для поиска минимального значения в дереве и выводится результат.
  6. Рекурсивная функция для удаления дерева вызывается для корня дерева.
  7. Все узлы освобождаются с помощью оператора delete.
  8. Возвращается 0, что означает успешное завершение программы.

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


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

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

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы