【发布时间】:2019-04-09 05:42:53
【问题描述】:
编写一个 Lisp 程序来检查二叉树是否是二叉搜索树。
节点的左子树的键小于或等于其父节点的键。节点的右子树的键大于其父节点的键。
列表可以用来表示二叉树的结构如下:
'(8 (3 (1 () ()) (6 (4 () ())( 7 () ()))) (10 (()) (14 (13) ()))) 这将返回 true。
我正在尝试编写二进制递归方法,但我是初学者,我不知道从哪里开始。
(defun isBST (L)
(cond
((null (first L)) t)
((and (not (null (caadr L)) ) (< (first L) (caadr L)) ) nil)
((and (not (null (caaddr L))) (> (car L) (caaddr L))) nil)
((and (not (isBST (cadr L))) (not (isBST (caddr L)))) ))
)
【问题讨论】:
-
(not (null (caadr L))并不意味着它是叶节点。它可能是一个节点。您有 3 种不同类型的值。值、空值和节点。 -
(())在那里做什么?它打破了节点要么是()要么是三个项目的列表的模式:一个值和两个子树 -
@DipakRathod 你的编辑很糟糕。您的每一项更改都在破坏帖子。它被批准为技术性,因此我可以更快地对其进行编辑。请不要在未来对您尚未充分了解的内容进行更改。
-
@willNess 下次我会做完美的编辑
标签: recursion lisp binary-tree common-lisp binary-search-tree