我正在使用二叉搜索树类,我们必须使用递归来实现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。而且我非常确定第一个和两个以上的elifs习惯于找到&#39;包含x的节点。但是我不确定如何实施这四个案例。任何意见都将不胜感激。
此外,最终目标是使用此方法迭代BST并删除每个节点。
答案 0 :(得分:2)
好吧,你的第一步是找到X,记住你通过递归来做到这一点,所以你应该在其所在的子树上递归remove函数。 (左边如果x&lt; p.data,右边如果更高......只有当它们存在时)。接下来,一旦找到x(x = p.data),您需要担心该怎么做。
我建议绘制一棵树并将其视为一种算法。 :)
记住BST属性!树将必然修改它的结构以保护财产,所以..谁是孤独的孩子的新父亲? 提示:
可能是兄弟姐妹?
记住BST charasteristic
递归!!!)
答案 1 :(得分:2)
pseudo_code method_recurse需要参数:this_node