Шаг 153.
Основы языка Haskell.
Рекурсивные типы данных. BST-деревья. Демонстрационные примеры

    На этом шаге мы приведем несколько демонстрационных примеров.

    Приведем несколько демонстрационных примеров.

   ; Демонстрация функции, моделирующей операцию "построение
   ; скошенного бинарного дерева поиска".
   ;  Запуск функции на выполнение:
   ;
   ;  >muLISP85 SplTree.sys 201-06.LSP
   ;
   ; Автор: И.А.Кудрявцева (04.07.2006)
   ; ----------------------------------
   (DEFUN TEST (LAMBDA NIL
      (PRINT "Построение числового бинарного дерева поиска:")
      (SETQ Tree NIL)
      (LOOP
         (PRIN1 "Введите очередной элемент дерева (окончание !): ")
         (SETQ X (READ))
         ( (EQ X '!) )
         (PRINT (SETQ Tree (AddInRoot1 X Tree)))
         (PRINT "Числовое бинарное дерево поиска:") 
         (PRINT (OutTree Tree 0))
      )  
   ))
   (RDS)
Все файлы можно взять здесь.
   -- Модуль, описывающий абстрактный тип данных (АТД), модели-
   -- рующий числовые  бинарные  деревья поиска, представленные
   -- следующим объявлением:
   --
   --   data BTree = NIL | Node Int (BTree) (BTree)
   --
   -- Авторы: И.А.Кудрявцева, М.В.Швецкий (15.12.2010)

Раскрыть/скрыть модуль.

   -- Библиотека для работы со скошенными деревьями
   -- (Splay Tree).
   -- Требуется файл Tree.hs (библиотека для работы с
   -- числовыми бинарными деревьями поиска).
   --
   -- Автор: Кудрявцева И.А. (13.03.2012)

Раскрыть/скрыть модуль.

   -- Демонстрация композиции ротаций и поворотов "случайного"
   -- бинарного дерева поиска с пошаговым выводом  промежуточ-
   -- ных результатов 
   ------------------
   import Tree
   import SplTree
   -----------------------------
   test n m = writeFile "Output"
                    ("Дерево:\n " ++ (drawTree t1 0 ++ "\n\n") ++
                     "Высота дерева                      : " ++
                      show (top t1) ++ "\n" ++
                     "Идеальная сбалансированность дерева: " ++
                      show (idTreeP t1) ++ "\n\n" ++

                     "Результат спаренного поворота вправо:\n" ++
                      (drawTree t2 0) ++ "\n\n" ++
                     "Высота нового дерева               : " ++
                      show (top t2) ++ "\n" ++
                     "Идеальная сбалансированность дерева: " ++
                      show (idTreeP t2) ++ "\n\n" ++

                     "Результат ротации влево:\n" ++
                      (drawTree t3 0) ++ "\n\n" ++
                     "Высота нового дерева               : " ++
                      show (top t3) ++ "\n" ++
                     "Идеальная сбалансированность дерева: " ++
                      show (idTreeP t3) ++ "\n\n"
                    )
                 where t1 = newRndTree n m 17
                       t2 = zigZig_R t1
                       t3 = rot_Left t2

   --------------------------------------------------------
   -- Предикат, определяющий "идеальную сбалансированность"
   -- бинарного дерева поиска
   --------------------------------
   idTreeP tree  | tree==nil = True
                 | abs (nodes (left tree)-nodes (right tree))>1
                             = False  
                 | True      = idTreeP (left tree) &&
                               idTreeP (right tree)

Все файлы можно взять здесь.

    На следующем шаге мы приведем перечень задач для самостоятельного решения.




Предыдущий шаг Содержание Следующий шаг