我正在努力熟悉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
,但我不明白为什么我会得到这个例外。我的代码有问题吗?
答案 0 :(得分:3)
我怀疑是因为你在函数参数中重复使用“bst”,当值为nil时,这会让struct-map感到困惑....
尝试将函数参数重命名为其他内容。