Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
4 / 4 / 6
Регистрация: 10.04.2013
Сообщений: 45
1

Бинарное дерево на основе многоуровневых списков

11.04.2013, 18:03. Показов 1120. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun tst() (setq tree (list t "tree" (list (list 1 1 (list (list 1 11 (list nil nil)) (list 2 12 (list nil nil)))) (list 2 2 (list (list 1 21 (list nil nil)) (list 2 22 (list nil nil))))))) tree)
 
(defun getkey(l tr &optional k) (if (not k)
                         (setq k 0))
                                 (cond ((or (> k (length l)) (= k (length l)))
                        (return tr))
                           (getkey l (cond ((eq (nth k l) (nth 0 (nth 0 (nth 2 tr))))
                                (nth 0 (nth 2 tr)))
                                   ((eq (nth k l) (nth 0 (nth 1 (nth 2 tr))))
                                (nth 0 (nth 2 tr)))
                                   (return nil))
                               (+ k 1))))
(tst) - создает тестовое дерево (t "tree" ((1 1 ((1 11 (nil nil)) (2 12 (nil nil)))) (2 2 ((1 21 (nil nil)) (2 22 (nil nil))))))
(getkey (1 2) (tst)) - рекурсивная функция, которая должна вернуть значение 12.

При вызове интерпретатор ругается "The variable GETKEY is unbound". Что ему не нравится, не пойму.

Кому интересно задание "Задан одноуровневый список. Построить бинарное дерево, представленное многоуровневым списком."
Может кто знает уже готовое решение? Гуглом ничего не нашел, решил попробовать реализовать. Думаю, одним вечером не обойдется...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2013, 18:03
Ответы с готовыми решениями:

Бинарное дерево
Вообщем задачка ... Определить функцию для подсчета количества вершин бинарного дерева, значения...

Бинарное дерево
Доброго времени суток, форумчане! Прошу вас помочь с лабой по функциональному программированию! ...

Упорядоченное бинарное дерево
Привет всем! Такая вот задача: определить является ли бинарное дерево упорядоченным. Что...

Простое бинарное дерево
Помогите пожалуйста срочно разобраться с задачей. Заранее большое спасибо) Дан список целых...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
11.04.2013, 18:41 2
Функция getkey (судя по названию) ищет в дереве, а не строит его...
0
4 / 4 / 6
Регистрация: 10.04.2013
Сообщений: 45
11.04.2013, 18:52  [ТС] 3
Цитата Сообщение от Catstail Посмотреть сообщение
Функция getkey (судя по названию) ищет в дереве, а не строит его...
да. начал с поиска.

может, я задание не понял?
на входе список-ключ, который необходимо добавить в дерево. необходимо ведь искать каждый узел, чтобы его сверять с ключом. поэтому и начал с поиска.
Или все дерево как-то строится на основе одного списка, что не надо ничего искать? 0_о
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
11.04.2013, 19:06 4
Вот функция построения дерева поиска:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun add-in-tree (tree item)
   (cond ((null (car tree)) (rplaca tree item))
         ((> (car tree) item) (cond ((null (cadr tree)) (rplaca (cdr tree) (list item nil nil))) 
                                    (t (add-in-tree (cadr tree) item))))
         ((< (car tree) item) (cond ((null (caddr tree)) (rplaca (cddr tree) (list item nil nil)))
                                    (t (add-in-tree (caddr tree) item))))
         (t t)))
 
==> add-in-tree
 
(setq *tree* '(nil nil nil))
 
==> (NIL NIL NIL)
 
(dolist (i '(-1 3 1 2 7 8 -6) *tree*)
  (add-in-tree *tree* i))
 
==> (-1 (-6 NIL NIL) (3 (1 NIL (2 NIL NIL)) (7 NIL (8 NIL NIL))))
1
11.04.2013, 19:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2013, 19:06
Помогаю со студенческими работами здесь

Бинарное дерево на основе массива
Всем привет. Начал изучать бинарное дерево на основе массива, нужна подсказка, я правильно начал...

На основе выражения построить бинарное дерево
Дано арифметическое выражение, на основе его построить бинарное дерево, которое соответствует этому...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

На основе вводимой с клавиатуры последовательности чисел до первого нуля формируется бинарное дерево поиска
Страшно каюсь, не подумайте что я ленивый тюлень и мне не хочется вникать в тему, обычно я никогда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru