![]() |
|
|
![]()
|
|
| xMoNaHx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.5.2010 Репутация: нет Всего: нет |
Надо написать функцию, которая будет проверять является ли это дерево упорядоченным.
Помогите плиз) хотел вывести симметричный обход дерева (если он идет по возрастанию, то дерево упорядоченное), но что то не выходит. Делал по примеру кода, которым выводил обход на дельфи помогите плиз вот код обхода мой, он ответа не выдает (defun f (tr rez) (setq w tr) (cond ((> (length w) 0) (cond ( (> (length (left w)) 0) (f (left w) rez))) (setq rez (append rez w)) (cond ((and (listp (right w)) (> (length (right w)) 0)) (f (right w) rez))) ) ) ) (DEFUN LEFT (TREE) ; Функция возвращает левое поддерево дерева TREE (CADR TREE) ) (DEFUN RIGHT (TREE) ; Функция возвращает правое поддерево дерева TREE (CADDR TREE) ) (setq tr '(4 (2 (1 nil nil) (3 nil nil)) (5 nil nil))) ;4 - вершина ;ее потомки 2, 5 ;у 2ки потомки - 1 и 3, у которых потомков нет ;у 5ки потомков нет |
|||
|
||||
| xMoNaHx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.5.2010 Репутация: нет Всего: нет |
Помогите плиз.
Вот переделанный код симметричного обхода: Он мне выдает ответ нил. и рез равно нилу после выполнения функции. А принт, который в функции выдает 3 раза (1 Nil Nil). А если я просто сам вручную выполняю весь этот код с учетом рекурсий, то у меня все правильно работает. Помогите ПЛИЗ!!!(((((((( очень надо просто (defun f (tr rez) (setq w tr) (cond ((> (length w) 0) (cond ( (> (length (left w)) 0) (f (left w) rez))) (cond ( (not (null rez)) (cond ( (atom (car w) ) (setq rez (append rez (list (car w)))) )) (cond ( (listp (car w) ) (setq rez (append rez (car w))) )) )) (cond ( (null rez ) (setq rez (append rez w)) )) (print rez) (cond ((and (listp (right w)) (> (length (right w)) 0)) (f (right w) rez))) ) ) ) (DEFUN LEFT (TREE) ; Функция возвращает левое поддерево дерева TREE (CADR TREE) ) (DEFUN RIGHT (TREE) ; Функция возвращает правое поддерево дерева TREE (CADDR TREE) ) |
|||
|
||||
| xMoNaHx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.5.2010 Репутация: нет Всего: нет |
Насколько я понял у меня ошибка происходит при возврате из рекурсии. Пока он спускается по одной ветви - все хорошо, а когда возвращается к развязке, то значение результата почему то не сохраняетяс а сбрасывается. Как сделать чтобы оно сохранялось?
|
|||
|
||||
| xMoNaHx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.5.2010 Репутация: нет Всего: нет |
Вроде получилось ))))
Эта программа говорит является ли переданное бинарное дерево упорядоченным)
|
|||
|
||||
| vsalda |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 11.7.2011 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума LISP | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LISP | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |