Работа с двоичными деревьями в языке lisp

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

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

создал некое дерево в языке lisp: (setq list ' (4 (2 (1 nil nil) (3 nil nil)) (5 nil nil))) нужно написать функцию: 1) для проверки принадлежности элемента дереву 2) для добавления элемента в это дерево помогите пожалуйста кому не трудно, сам в этом не разбираюсь

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

textual
Листинг программы
(defun ins-in-tree (tree v)
  (cond ((null tree) (list v nil nil))
        ((> v (car tree)) (list (car tree) (cadr tree) (ins-in-tree (caddr tree) v)))
        (t (list (car tree) (ins-in-tree (cadr tree) v) (caddr tree)))))
 
 
(ins-in-tree nil 6)
 
==> (6 NIL NIL)
 
(ins-in-tree '(6 nil nil) 7)
 
==> (6 NIL (7 NIL NIL))
 
(ins-in-tree '(6 NIL (7 NIL NIL)) -7)
 
==> (6 (-7 NIL NIL) (7 NIL NIL))

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

В данном коде представлена реализация функции для добавления нового элемента в двоичное дерево. Список действий, которые выполняются в данном коде:

  1. Определение функции ins-in-tree, которая принимает два аргумента: tree и v.
  2. В функции используется условная конструкция cond, которая проверяет три случая:
    • Если tree равно NIL, то создается новый узел с аргументом v и возвращается в виде списка: (v nil nil).
    • Если v больше значения в корневом узле (car tree), то рекурсивно вызывается функция ins-in-tree для обработки правой поддерева с аргументом v. Возвращается список: (car tree) (ins-in-tree (cadr tree) v) (caddr tree).
    • В противном случае, рекурсивно вызывается функция ins-in-tree для обработки левого поддерева с аргументом v. Возвращается список: (car tree) (ins-in-tree (cadr tree) v) (caddr tree).
  3. Вызов функции ins-in-tree с аргументами nil и 6, что приводит к созданию нового узла с аргументом 6 и возврату в виде списка: (6 nil nil).
  4. Вызов функции ins-in-tree с аргументами '(6 nil nil) и 7, что приводит к созданию нового узла с аргументом 7 и возврату в виде списка: (6 nil (7 nil nil)).
  5. Вызов функции ins-in-tree с аргументами '(6 NIL (7 NIL NIL)) и -7, что приводит к изменению значения в узле с ключом 7 и возврату в виде списка: (6 (-7 NIL NIL) (7 NIL NIL)).

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


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

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

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