PYTHON二进制搜索树 - 递归删除

时间:2015-04-09 22:59:39

标签: python data-structures tree binary-search-tree

我正在使用二叉搜索树类,我们必须使用递归来实现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并删除每个节点。

2 个答案:

答案 0 :(得分:2)

好吧,你的第一步是找到X,记住你通过递归来做到这一点,所以你应该在其所在的子树上递归remove函数。 (左边如果x&lt; p.data,右边如果更高......只有当它们存在时)。接下来,一旦找到x(x = p.data),您需要担心该怎么做。

我建议绘制一棵树并将其视为一种算法。 :)

记住BST属性!树将必然修改它的结构以保护财产,所以..谁是孤独的孩子的新父亲? 提示:

  可能是兄弟姐妹?

  

记住BST charasteristic

  

递归!!!)

答案 1 :(得分:2)

pseudo_code method_recurse需要参数:this_node

  1. 如果this_node为None,则返回None Found
  2. 如果this_node是target,则返回this_node
  3. 如果this_node小于目标,则返回使用this_node.right
  4. 的自我调用
  5. 如果this_node为greater_than target,则返回call this self with this_node.left