I는 다음의 이진 트리 문자 노드 이름은 리스프 (A 2 B 0 C 2 D 0 E 0)의리스트로 표시LISP의 이진 트리의 깊이를 계산 재귀
A /\ B C /\ D E
을 숫자는 자식 노드의 수입니다 (0이면 none, 1 노드가 1, 2 노드가 2). 루트 노드에서 트리 깊이 (이진 트리 깊이)를 재귀 적으로 발견해야합니다. 저는 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. 이것은 내가 대학에서 선물 할 작은 프로젝트의 일부이지만, Lisp을 더 잘 활용할 수있는 자신 만의 방식 (많은 유사한 게시물에 글이 숙제와 관련이 있는지 질문하는 질문이있었습니다). :)
먼저 더 좋은 형식으로 트리를 변환! – Artelius
즉, 트리는 트리 목록이어야합니다. (이진 트리는 2 개 이하의 이진 트리 목록이어야합니다.) 목록에는 목록이 포함될 수 있습니다. 재귀 함수를 작성하려는 경우 재귀 데이터 구조를 사용하는 것이 좋습니다. – Artelius
B 아래에 다른 노드 F가있는 경우 트리가'(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