Работа с бинарным поисковым деревом - C#

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

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

Имеется такая вот задачка: Условие Найти вершины, через которые проходит нечетное число путей максимальной длины, и удалить (правым удалением) ту из них, ключ которой наибольший. Если в дереве нет вершин, удовлетворяющих нужному свойству, то ничего удалять не требуется. Выполнить прямой (левый) обход полученного дерева. Замечание Если в дереве нет вершин, удовлетворяющих нужному свойству, то ничего из дерева удалять не надо. Входные данные tst.in содержит последовательность чисел — ключей дерева. Выходные данные tst.out содержит массив вершин, полученный прямым левым обходом итогового дерева. Пример tst.in 10 5 20 4 6 15 30 3 7 14 40 8 50 9 60 tst.out 10 5 4 3 6 7 8 9 20 15 14 30 40 50 Буду рад любой помощи в реализации задачки, особенно интересует реализация самого дерева и поиск количества путей проходящих через вершину. З.Ы. О_о Пошел гуглить...

Решение задачи: «Работа с бинарным поисковым деревом»

textual
Листинг программы
  1. //поиск максимального пути
  2.         static int max = 0;
  3.         static void put()
  4.         {
  5.             for (int j = 0; j < L.Count; j++)
  6.             {
  7.                 Item x = L[j];
  8.                 int xg = G[j]; //глубина
  9.                 for (int i = 0; i < L.Count; i++)
  10.                 {
  11.                     Item y = L[i];
  12.                     int yg = G[i]; //глубина
  13.                     int p = 0;
  14.                     while ((x != root && y != root) /*|| (x != y)*/)
  15.                     {                      
  16.                         if (x == y && x.lSon == null && x.rSon == null && y.lSon == null && y.rSon == null) { p = 0; break; }
  17.                         if (x == y && y != root && x != root && x.lSon != null && x.rSon != null && y.lSon != null && y.rSon != null) { p = p - 1; break; }
  18.                         if ((x != y) && (x.lSon == null || x.rSon == null))
  19.                         {
  20.                             while ((x.rSon == null) || (x.lSon == null))
  21.                             {
  22.                                 x = x.father;
  23.                                 p = p + 1;
  24.                                 xg--;
  25.                             }
  26.                         }
  27.                         if ((x != y) && (y.lSon == null || y.rSon == null))
  28.                         {
  29.                             while ((y.rSon == null) || (y.lSon == null))
  30.                             {
  31.                                 y = y.father;
  32.                                 p = p + 1;
  33.                                 yg--;
  34.                             }
  35.                         }
  36.                         if (y == root)
  37.                         {
  38.                             while (x != root)
  39.                             {
  40.                                 x = x.father;
  41.                                 p++;
  42.                                 xg--;
  43.                             }
  44.                         }
  45.                         if (x == root)
  46.                         {
  47.                             while (y != root)
  48.                             {
  49.                                 y = y.father;
  50.                                 p++;
  51.                                 yg--;
  52.                             }
  53.                         }
  54.  
  55.                         if ((x != y) && (x.lSon != null) && (x.rSon != null) && (y.lSon != null) && (y.rSon != null) && (xg > yg))
  56.                         {                            
  57.                             { x = x.father; p = p + 1; xg--; }
  58.                         }
  59.  
  60.                         if ((x != y) && (x.lSon != null) && (x.rSon != null) && (y.lSon != null) && (y.rSon != null) && (xg < yg))
  61.                         {
  62.                             { y = y.father; p = p + 1; yg--; }
  63.                         }
  64.                         if ((x != y) && (x.lSon != null) && (x.rSon != null) && (y.lSon != null) && (y.rSon != null) && (xg == yg))
  65.                         {
  66.                             { x = x.father; p = p + 1; xg--; }
  67.                             { y = y.father; p = p + 1; yg--; }
  68.                         }
  69.  
  70.                         if (x == y && x == root && y == root) { p = p - 1; break; }
  71.                     }
  72.                     Console.WriteLine("длинны " + p);
  73.                     if (max < p) { max = p; }
  74.                 }
  75.            }
  76.         }

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


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

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

13   голосов , оценка 3.923 из 5

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

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

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