Определить функцию, которая добавляет в упорядоченное дерево элемент а - Lisp

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

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

Определить функцию (ДОБАВЬ а дерево), которая добавляет в упорядоченное дерево (дерево) элемент а. (Подсказка: копировать дерево по пути поиска и подправлять нужное поддерево). Если изначально дерево не пустое: (setq tree '(90 0 100)), то нужно добавить в это дерево новый элемент.

Решение задачи: «Определить функцию, которая добавляет в упорядоченное дерево элемент а»

textual
Листинг программы
  1. ;; Добавить a в упорядоченное дерево tree
  2.  
  3. (defun add-in-tree (a tree)
  4.   (cond ((null tree) (list nil a nil))
  5.         ((> a (cadr tree)) (list (car tree) (cadr tree) (add-in-tree a (caddr tree))))
  6.         (t (list (add-in-tree a (car tree)) (cadr tree) (caddr tree)))))
  7.  
  8. ==> add-in-tree
  9.  
  10.  
  11. ;; Создание пустого дерева
  12.  
  13. (setq *tree* nil)
  14.  
  15. ==> NIL
  16.  
  17. ;; добавим 5
  18.  
  19. (setq *tree* (add-in-tree 5 *tree*))
  20.  
  21. ==> (NIL 5 NIL)
  22.  
  23. ;; добавим 6
  24.  
  25. (setq *tree* (add-in-tree 6 *tree*))
  26.  
  27. ==> (NIL 5 (NIL 6 NIL))
  28.  
  29. ;; добавим 0
  30.  
  31. (setq *tree* (add-in-tree 0 *tree*))
  32.  
  33. ==> ((NIL 0 NIL) 5 (NIL 6 NIL))
  34.  
  35. ;; добавим 1
  36.  
  37. (setq *tree* (add-in-tree 1 *tree*))
  38.  
  39. ==> ((NIL 0 (NIL 1 NIL)) 5 (NIL 6 NIL))
  40.  
  41. ;; добавим 8
  42.  
  43. (setq *tree* (add-in-tree 8 *tree*))
  44.  
  45. ==> ((NIL 0 (NIL 1 NIL)) 5 (NIL 6 (NIL 8 NIL)))
  46.  
  47. ;; Преобразовать дерево в список (порядок обхода: левое - корень - правое)
  48.  
  49. (defun tree-to-list (tree)
  50.   (cond ((null tree) nil)
  51.         (t (append (tree-to-list (car tree)) (list (cadr tree)) (tree-to-list (caddr tree))))))
  52.  
  53. ==> tree-to-list
  54.  
  55. ;; Проверка
  56.  
  57. (tree-to-list *tree*)
  58.  
  59. ==> (0 1 5 6 8)

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

В данном коде определена функция add-in-tree, которая добавляет элемент a в упорядоченное дерево tree. Алгоритм работы функции следующий:

  1. Если дерево пустое, то возвращается новое дерево, состоящее из одного элемента — a.
  2. Если a больше элемента, находящегося в корне дерева, то рекурсивно вызывается функция для правой части дерева.
  3. Если a меньше или равно корню дерева, то рекурсивно вызывается функция для левой части дерева, а в качестве третьего аргумента передается результат вызова функции для правой части дерева. Также в коде определена функция tree-to-list, которая преобразует дерево в список. Алгоритм работы функции следующий:
  4. Если дерево пустое, то возвращается nil.
  5. Если узел дерева не является листовым, то в список добавляются значения, полученные при вызове функции для левого поддерева, корня и правого поддерева. В конце кода вызывается функция tree-to-list для преобразования дерева в список и выводится результат.

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


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

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

7   голосов , оценка 3.857 из 5

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

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

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