如何在Lisp中从二进制搜索树中删除

如何在Lisp中从二进制搜索树中删除,lisp,scheme,racket,binary-search-tree,Lisp,Scheme,Racket,Binary Search Tree,如何从BST中删除节点 在Dr.Scheme中,我需要一个算法来实现这一点。假设您的二叉搜索树使用只在叶子上有内容的直接cons单元格,并且假设您正在做家庭作业: 您可以使用设置汽车或设置cdr更改cons单元格的内容。假设您的二元搜索树使用只在叶子上有内容的直接cons单元格,并假设您正在做家庭作业: 您可以使用设置汽车或设置cdr更改cons单元格的内容。您基本上丢弃了现有的BST,并创建了一个新的BST 可以通过递归地从树上降下来来实现这一点。如果您的项小于根数据,请创建一个BST,其根和

如何从BST中删除节点


在Dr.Scheme中,我需要一个算法来实现这一点。

假设您的二叉搜索树使用只在叶子上有内容的直接cons单元格,并且假设您正在做家庭作业:
您可以使用
设置汽车
设置cdr
更改cons单元格的内容。

假设您的二元搜索树使用只在叶子上有内容的直接cons单元格,并假设您正在做家庭作业:
您可以使用
设置汽车
设置cdr
更改cons单元格的内容。

您基本上丢弃了现有的BST,并创建了一个新的BST

可以通过递归地从树上降下来来实现这一点。如果您的项小于根数据,请创建一个BST,其根和大于分支是从您现在拥有的复制而来的,但其小于分支是递归调用的结果


这与添加节点的方式非常相似,但当您找到要搜索的节点时,将其下方的两个BST合并并返回结果。关于如何做到这一点,肯定存在一些问题。

你基本上是扔掉你现在拥有的BST,然后创建一个没有元素的新BST

可以通过递归地从树上降下来来实现这一点。如果您的项小于根数据,请创建一个BST,其根和大于分支是从您现在拥有的复制而来的,但其小于分支是递归调用的结果


这与添加节点的方式非常相似,但当您找到要搜索的节点时,将其下方的两个BST合并并返回结果。关于如何做到这一点,肯定存在一些问题。

这完全是一个实施问题。您如何表示BST?可能希望将其标记为scheme和dr scheme以及家庭作业,这完全是一个实现问题。您如何表示BST?可能希望使用scheme和dr scheme标记此内容,racket中的homeworkCons单元格是不可变的。mcons,设置mcar!然后为R6RS设置mcdr。CONS单元在Racket中是不可变的,而不是在R6RS中(包括R6RS的Racket实现)。但总的来说,最好避免这些副作用——或者,如果必须避免的话,那么一个特定的结构比屠宰cons单元格要好。racket中的cons单元格是不可变的。mcons,设置mcar!然后为R6RS设置mcdr。CONS单元在Racket中是不可变的,而不是在R6RS中(包括R6RS的Racket实现)。但总的来说,最好避免这些副作用——或者,如果你不得不这样做,那么一个特定的结构比屠宰细胞要好。