我正在开发一个二进制搜索树类,我们必须使用递归实现remove方法。这是给我们的代码。
def remove (self, x):
def recurse (p):
# Modify this method.
if p==None:
return p
elif x<p.data:
return p
elif x>p.data:
return p
elif p.left==None and p.right==None: # case (1)
return p
elif p.right==None: # case (2)
return p
elif p.left==None: # case (3)
return p
else: # case (4)
return p
self.root = recurse (self.root)
显然,对于每个条件,应该不仅仅返回p。我非常确定第一个if和两个elif用于"定位"包含x的节点。但是我不确定如何实现这四种情况。任何意见都将不胜感激。
此外,最终目标是使用此方法迭代BST并删除每个节点。
好吧,你的第一步是定位X,记住你是通过递归来完成的,所以你应该在它所定位的子树上递归remove函数。(左如果x<p.data,右如果更高……仅当它们存在时)。接下来,您需要担心一旦找到x(x=p.data)该怎么办。
我建议画一棵树,并将其作为一种算法进行思考。:)
记住BST属性!为了保护财产,这棵树必须修改它的结构,那么……谁是孤独孩子的新父亲?提示:
可能是兄弟姐妹?
记住BST特征
递归!!)
pseudo_code method_recurse需要参数:this_node
- 如果this_node为None,则返回None Found
- 如果this_node是目标,则返回this_node
- 如果this_node是less_than目标,则使用this_node.right返回call self
- 如果this_node大于target,则使用this_node.left返回call self