Я пытаюсь написать код, чтобы проверить, сбалансировано ли n-арное дерево или нет. Дерево задается следующим образом:Проверьте, сбалансировано ли n-арное дерево в Common Lisp
(A (B (E (I))(F))(C (G))(D))
, который будет выглядеть так:
A
/| \
B C D
/\ |
E F G
|
I
Какой бы несбалансированным.
Я думал о ее решении использовать что-то вроде:
максимальный уровень всех листьев письма - уровень мин всех листьев не должно быть больше, чем 1.
я думал о применении этого правила для A, B, C в первую очередь. Если разница не больше 1, тогда проверьте E, F, G, пока я не проверил все возможные буквы, а дерево не сбалансировано, или я получил разницу больше 1, что означает, что она неуравновешена.
Это код мин/макс уровня:
(defun nrlvlmax (tail)
(cond
((null tail) 0)
((listp (car tail)) (max (+ 1 (nrlvl (car tail))) (nrlvl (cdr tail))))
(t (nrlvl (cdr tail)))
)
)
Я не знаю, как разобрать список и применить мое правило. Я не должен использовать функции map/lamba, только как основы. Как разобрать данный список?
спасибо. Это то, что я искал. – Mocktheduck