У меня есть следующее двоичное дерево
A
/ \
B C
/ \
D E
представлен в виде списка в Лиспе (A 2 B 0 C 2 D 0 E 0), где буквы - это имена узлов, а числа - это количество дочерних узлов (0 для ни одного, 1 один узел, 2 два узла). Мне нужно найти наибольшую от корневого узла до листа глубину дерева (глубину бинарного дерева) рекурсивно. Я довольно новичок в Лиспе и не могу понять, как это реализовать. Вот что мне до сих пор удается придумать:
(defun depth (tree)
"Returns the depth of the argument tree."
(check-type tree list)
(if (= (second tree) 0)
0
(1+ (get-btree-max-depth (cddr tree)))))
(defun get-btree-max-depth (btree)
"Returns the maximum depth
of the argument tree."
(check-type btree list)
(if (= (second btree) 0)
0
(max (depth (cddr btree))
(get-btree-max-depth (cddr btree)))))
но это не работает должным образом. Я также просматривал подобные сообщения, но не нашел ничего полезного, что могло бы мне помочь. Может ли кто-нибудь дать мне предложение, чтобы помочь выяснить это? Спасибо!
P.S. Это часть небольшого проекта, который я представлю в университете, но также и мой собственный путь к улучшению в Лиспе (я видел, что у многих похожих постов были вопросы, спрашивающие, связано ли это с домашней работой). :)