我似乎無法弄清楚如何從BST中刪除元素。這是我的代碼刪除方案中的BST中的元素
(define remove (lambda (x t)
(if (< x (car t)) (list (car t) (remove x (cadr t)) (caddr t))
(if (> x (car t)) (list (car t) (cadr t) (remove x (caddr t)))
(if (not(and (null? (cadr t)) (null? (caddr t))))
(let ((r (minimum (caddr t)))) ((remove r t) (set-car! t r)))
(list '() (cadr t) (caddr t)))))))
最小值返回樹中的最小值。 如果我嘗試刪除一個不是葉子的元素,它將進入無限循環。我該如何解決它?
看起來像[此問題]的副本(http://stackoverflow.com/questions/4374530/how-do-i-delete-from-a-binary-search-tree-in-lisp/4383580)。 – 2010-12-11 19:22:21