【发布时间】:2010-12-15 20:32:39
【问题描述】:
我有以下二叉树
一种 / \ 乙丙 / \ 德在 Lisp (A 2 B 0 C 2 D 0 E 0) 中表示为一个列表,其中字母是节点名称,数字是子节点的数量(0 表示无,1 表示一个节点,2 表示两个节点)。我需要递归地找到从根节点到树的叶深度(二叉树的深度)的最高值。我对 Lisp 很陌生,我不知道如何实现它。到目前为止,这是我设法提出的:
(定义深度(树) “返回参数树的深度。” (检查类型树列表) (如果(=(第二棵树)0) 0 (1+ (get-btree-max-depth (cddr 树))))) (defun get-btree-max-depth (btree) "返回最大深度 论点树。” (检查类型 btree 列表) (如果 (= (第二个 btree) 0) 0 (最大(深度(cddr btree)) (get-btree-max-depth (cddr btree)))))但它不能正常工作。我也浏览了类似的帖子,但没有发现任何有用的东西可以帮助我。有人可以给我一个建议来帮助解决这个问题吗?谢谢!
附:这是我将在大学展示的一个小项目的一部分,也是我自己在 Lisp 中变得更好的方式(我看到许多类似的帖子都有问题,询问帖子是否与家庭作业有关)。 :)
【问题讨论】:
-
首先将树转换为更好的格式!
-
即树应该是树的列表。 (二叉树应该是不超过 2 个二叉树的列表)。请记住,列表可以包含列表!当您想编写递归函数时,使用递归数据结构是有意义的。
-
如果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)? -
它将被表示为 (node list-of-child-nodes1 list-of-child-nodes2 ...) 所以在 B 下面有一个 F 节点的树将是 (A 2 B 1 F 0 C 2 D 0 E 0)
标签: recursion lisp binary-tree