Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упорядоченное дерево, упорядочено ли дерево? 
:(
    Опции темы
xMoNaHx
Дата 23.5.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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ки потомков нет
PM MAIL   Вверх
xMoNaHx
Дата 24.5.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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)
   )



PM MAIL   Вверх
xMoNaHx
Дата 25.5.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.5.2010

Репутация: нет
Всего: нет



Насколько я понял у меня ошибка происходит при возврате из рекурсии. Пока он спускается по одной ветви - все хорошо, а когда возвращается к развязке, то значение результата почему то не сохраняетяс а сбрасывается. Как сделать чтобы оно сохранялось?
PM MAIL   Вверх
xMoNaHx
Дата 25.5.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.5.2010

Репутация: нет
Всего: нет



Вроде получилось ))))
Эта программа говорит является ли переданное бинарное дерево упорядоченным)
Код


(setq tr '(4 (2 (1 nil nil) (3 nil nil)) (5 nil nil)))

  (defun f (tr rez)

   (setq r rez)

   (cond ((> (length tr) 0)

          (cond ( (> (length (left tr)) 0)
             (f (left tr) r)))


          (setq r (append r (list (car tr))))


          (cond ((> (length (right tr)) 0)
             (f (right tr) r)))
          ) )

          (sr r)

 )


 (defun sr (rez)
    (cond  ((= (length rez) 1) T)
        (  (< (car rez) (cadr rez)) (sr (cdr rez)))
         (T Nil)
     )
 )

 (defun left (tr)
   ; Функция возвращает левое поддерево дерева TREE
      (cadr tr)
   )


   (defun right (tr)
   ; Функция возвращает правое поддерево дерева TREE
      (caddr tr)
   )


PM MAIL   Вверх
vsalda
Дата 11.7.2011, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.7.2011

Репутация: нет
Всего: нет



Полное решение данной задачи
В помощь студентам
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.