У меня есть следующий бинарное деревоРасчет глубины бинарного дерева в LISP рекурсивно
A /\ B C /\ D E
представлены в виде списка в Лиспе (A 2 B 0 C 2 D 0 E 0), где буквы имена узлов и числа - это число дочерних узлов (0 ни для одного, ни для одного узла, ни для двух узлов). Мне нужно найти наивысшее значение от корневого узла до глубины листа дерева (глубина двоичного дерева, которое есть) рекурсивно. Я довольно новичок в Lisp, и я не могу понять, как его реализовать. Это то, что мне до сих пор удается найти:
(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. Это часть небольшого проекта, который я буду представлять в Университете, но также и мой собственный способ стать лучше в Lisp (я видел, что на многих похожих постов были вопросы, задающие вопрос о том, связано ли сообщение с домашней работой). :)
Преобразование дерева в удобном формате первый! – Artelius
То есть дерево должно быть списком деревьев. (Бинарное дерево должно быть списком не более двух двоичных деревьев). Помните, что списки могут содержать списки! Имеет смысл использовать рекурсивные структуры данных, когда вы хотите написать рекурсивные функции. – Artelius
Если бы был еще один узел F ниже B, было бы ли дерево представлено как '(A 2 B 1 F 0 C 2 D 0 E 0)' или '(A 2 B 1 C 2 F 0 D 0 E 0)'? – Svante