分類:[その他の言語]
お世話になっております。
また質問させていただきます。
Allegro Common lisp 8.0を使っています。
lispで二分探索木に新しいデータを追加するプログラムを作っています。
二分探索木をリスト構造で(n (left-tree) (right-tree))というように表します。
データとして、以下のようなリスト構造による二分探索木を定義しておきます。
(setq tree '(8
(5 (2 nil nil) (7 nil nil))
(15 nil nil)))
二分探索木に新しいデータを追加する関数tree-insert(n tree)を作ったのですが、うまく挿入されません。
(defun tree-insert (n tree)
(let ((subtree tree))
(loop
(if (null subtree) (return)
(if (> (car subtree) n) (setq subtree (second subtree))
(setq subtree (third subtree)))))
(setf subtree n)
(print tree)))
考え方は、各節でデータを比較ながら木を辿り、nilのところまで来たら、nilを新しいデータに書き換えるというものです。
(tree-insert 1 tree)というように実行しても、元のtreeがそのまま返ってきます。
どこが間違っているのでしょうか。
ご指摘お願いします。
|