DrRacket删除二进制搜索树的根

时间:2011-11-12 00:07:21

标签: scheme racket binary-search-tree

请注意这是家庭作业! - >我不是在寻找直接的代码示例,而是一些温和的按摩我的推理...

我被要求编写一个函数,通过做三件事来删除二叉搜索树的根: i)将树旋转到右边 ii)删除右子树的根(这是原始的bst根) iii)使用新根(原始树的左侧)重建bst并对该节点的子节点进行适当的重新排列......这就是我所拥有的:

    (define (rm-root my-bst)
      (list (key (rot-r my-bst)) 
            (left (rot-r my-bst)) 
            (append (right (right (rot-r my-bst))) 
                    (left (right (rot-r my-bst))))))

这一切都很棒,期望它不会重建具有“提升”到根节点的节点的子节点的树。任何人都可以帮我思考我应该如何实现它?我应该提一下,我们已经将Bst定义为列表,并且函数rot-r将bst旋转到右侧。谢谢。

1 个答案:

答案 0 :(得分:1)

嗯,我不确定这个问题提出后12天会有用,但是这里有用。

要清楚,我猜测数据结构的形式是(左边的列表键),左边和右边也是树(或者是空的,但这与此无关)。如果不是这种情况,则需要澄清这一点。

您的代码中的一个问题是您不希望直接将右边的两个列表附加到右侧。您想要使用其中一个的键,然后左侧和右侧创建一个列表。如果我正确地读这个,左边的函数应该返回一个树,因此应该可以正常工作。

如果我是你,我会检查rot-r的实现,因为这似乎是出错的主要可能性。