在clojure中实现二叉搜索树

时间:2011-02-07 16:55:14

标签: clojure

我正在努力熟悉Clojure,因此我开始实现一些基本的算法和数据结构。我目前在实现二叉搜索树时遇到问题。这是我的代码:

(defstruct bst :left :right :key)

(defn add-bst [n bst-t]
  (cond
    (nil? bst-t) (struct-map bst :left nil :right nil :key n)
    (< n (:key bst-t))  (struct-map bst :left (add-bst n (:left bst-t))
                                :right (:right bst-t) :key (:key bst-t))
    (> n (:key bst-t))  (struct-map bst :left (:left bst-t)
                                :right (add-bst n (:right bst-t)) :key (:key bst-t))
    true bst-t))

我试图在REPL中添加随机数到BST,行:

(exercise.new-ns/add-bst 5 nil)

但是我得到了NullPointerException,但我不明白为什么我会得到这个例外。我的代码有问题吗?

1 个答案:

答案 0 :(得分:3)

我怀疑是因为你在函数参数中重复使用“bst”,当值为nil时,这会让struct-map感到困惑....

尝试将函数参数重命名为其他内容。