Бинарные деревья
Язык XLISP
Задание Разработать класс для представления объектов-бинарных деревьев. Вершины в представлении дерева обозначаются уникальными символьными атомами. Предусмотреть операции расширения множества вершин, исключения вершин из дерева, проверки вхождения вершины в дерево, вывода в виде списка из двух элементов вершин-потомков для указанной вершины (для листьев это пустой список nil).
буду благодарен за любые подсказки. Главная проблема, это то что я не совсем понимаю концепцую программирования на даном языке...
Неужели, никто подсказать ниче не может? Я вот не могу понять. если реализовывать в СИ, то тут все ОК, укаазтели тому подобное, а вот на Лиспе..... что-то жо меня не доходит
Скорее набор функций для работы с деревьями.
P.S. Уточни что подразумеваешь под:
Цитата:
Предусмотреть операции расширения множества вершин
Добавление вершины? в какое место
кинь лисп на [email]hydraxl@mail.ru[/email] - нарисую
Код:
(setq Tree (send Class :new '(h l1 l2) ))
вершина всмысле новый листок дерева. т.е добавление в одну из самых последних вершин, где листики равны нилу
лисп отправил.
заранее большое спасибо.
Код:
;Create class
(setq Tree (send Class :new '(root tleft tright)))
;Print tree
(send Tree :answer :show '()
'((cond ((null root) (print NIL))
((not (null tleft)) ((print root) (send tleft :show)))
((not (null tright)) ((print root) (send tright :show)))
(t (print root))))
)
;Add item
(send Tree :answer :add '(n)
'((cond ((null root) (setq root n))
((> root n) ; Add to left branch
(if (null tleft)
((setq tleft (send Tree :new)) (send tleft :add n))
(send tleft :add n)))
(t
(if (null tleft)
((setq tleft (send Tree :new)) (send tleft :add n))
(send tleft :add n)))
) self)
)
(setq Tree (send Class :new '(root tleft tright)))
;Print tree
(send Tree :answer :show '()
'((cond ((null root) (print NIL))
((not (null tleft)) ((print root) (send tleft :show)))
((not (null tright)) ((print root) (send tright :show)))
(t (print root))))
)
;Add item
(send Tree :answer :add '(n)
'((cond ((null root) (setq root n))
((> root n) ; Add to left branch
(if (null tleft)
((setq tleft (send Tree :new)) (send tleft :add n))
(send tleft :add n)))
(t
(if (null tleft)
((setq tleft (send Tree :new)) (send tleft :add n))
(send tleft :add n)))
) self)
)
Большое спасибо.
Я понимаю что эта тема была давно и всеми забыта, но сейчас я столкнулась с решением именно этой задачи и если ктото доделал ее до конца скиньте плз исходники))