【发布时间】:2017-03-19 06:18:17
【问题描述】:
我是 Lisp 的新手,所以请放轻松。我试图将二叉搜索树实现为数组并能够按顺序输出。 我有这个数组,其中索引 1 是根,2*i 是左孩子,2*i + 1 是右孩子:
#(NIL 30 15 50 10 20 NIL 70 3 NIL 17 NIL NIL NIL NIL 80 NIL NIL NIL NIL NIL NIL
NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
NIL NIL NIL)
我将它发送到这个函数以从树中提取顺序输出:
(defun inOrder (tree rootIndex)
(setq leftI (* rootIndex 2))
(setq rightI (+ leftI 1))
(if (aref tree leftI)
(inOrder tree leftI))
(format t "~D," (aref tree rootIndex))
(if (aref tree rightI)
(inOrder tree rightI)))
预期的输出应该是 3,10,15,17,20,30,50,70,80,但我得到的是 3,10,15,30。 格式后的代码似乎没有被执行。如果有人可以帮助我,将不胜感激。
【问题讨论】:
-
请不要在 CL 中使用驼峰式命名。默认情况下,阅读器将大写未转义的字符。这就是为什么如果你在 repl 中评估
'leftU,你会看到LEFTU。 [TLDR 符号不区分大小写]
标签: recursion common-lisp binary-tree binary-search-tree inorder