lisp - 在 Lisp 中构建二叉树

标签 lisp binary-search-tree

我正在尝试用 lisp 构建一棵二叉树。该函数应该执行此操作

(buildBST  ‘(6 9 2 1 7))  -> (6  (2 (1) ()) (9 (7) ())) 

我们到目前为止的代码将不断返回错误

> 7 nil arguments should be of type real

这是我们的代码

(defun buildBst (lis)
    (cond 
        ((null lis) 0)
        ((atom lis) lis)
        (t (if ( >(car lis)(car(cdr lis)))
                (buildBst( cdr lis))
                (buildBst(cdr lis))))))

最佳答案

最好的方法是创建一个插入函数:

(defun tree-insert-element (tree element)
  (cond ((tree-null-p tree) 
         (make-tree element nil nil))
        ((< (tree-value tree) element) 
         (make-tree (tree-value tree)
                    (tree-left tree)
                    (tree-insert-element (tree-right tree) element)))
        (t 
         (make-tree (tree-value tree)
                    (tree-insert-element (tree-left tree) element)
                    (tree-right tree)))))

因此,当您想要插入一大堆时,您可以这样做:

(defun tree-insert-list (tree list)
  (reduce #'tree-insert-element list :initial-value tree))

当然,您需要定义插入函数使用的函数,因为我真的不关心您如何选择对树进行建模。从预期结果来看,我猜 make-tree 可能只是包装 list*,但这不是制作树的唯一方法!

关于lisp - 在 Lisp 中构建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377861/

相关文章:

javascript - Parenscript 和隐式 Return

lisp - common lisp 在格式之后调用 read-line 会在 Clozure CL 实现中产生额外的换行符

c - 打印 BST 中的 n 个最大值

c - 插入二叉搜索树

html - 使用 Emacs 将纯文本文件转换为 HTML。如何添加结束标签?

list - 返回和的 Lisp 函数

scheme - 列表中的相对质数

c++ - 二叉搜索树分割错误

c - 如何使用二叉搜索树存储字符串?

c - 以随机顺序打印平衡 BST 的最佳方法?