【发布时间】:2020-11-10 20:31:24
【问题描述】:
我正在尝试做一个 lisp 函数,它将接收一个列表并返回一个完整的二叉树,其节点以相同的顺序从列表的元素中填充。
例如,
(makeTree '(4 3 9 10))
(4 (3 (9 () ()) ()) (10 () ()))
为此,我使用了一个将列表拆分为 2 的函数。所以,我所做的是尝试将列表的头部与尾部分开,然后使用拆分函数来执行二叉树.但我在实施它时遇到了麻烦。有人可以帮我吗?
到目前为止,这是我的代码:
(defun aux-head (l n)
(if (= n 0) '()
(cons (car l) (aux-head (cdr l)(- n 1)))))
(defun aux-tail (l n)
(if (= n 0) l
(aux-tail (cdr l) (- n 1))))
(defun split (lst)
(cond
((null lst) '(()()))
((evenp (length lst))
(list (aux-head lst (/ (length lst) 2))(aux-tail lst (/ (length lst) 2))))
((oddp (length lst))
(list (aux-head lst (+ (floor (length lst) 2) 1))
(aux-tail lst (+ (floor (length lst) 2) 1))))))
(defun make-cbtree (lst)
(cond
((null lst) '(()()))
((car lst)
((split ((cdr lst)))))))
【问题讨论】:
-
代码有什么问题?
-
到目前为止代码没有错误,只是我需要帮助理解我必须如何做我的代码才能得到我需要的结果,这是一个完整的二叉树列表
-
我知道我要做什么,只是我不知道该怎么做
-
你怎么能通过输入说结果是
(4 (3 (9 () ()) ()) (10 () ())),而不是(4 (3 (9 () ()) (10 () ())) ())?有什么特别的规则吗?因为否则任务是模棱两可的 -
不是我说的。这是我们被要求做的。我添加了一张二叉树的图片,也许可以帮助
标签: lisp common-lisp