【问题标题】:PYTHON Binary Search Tree - Recursive RemovePYTHON 二叉搜索树 - 递归删除
【发布时间】:2015-04-09 22:59:39
【问题描述】:

我正在研究一个二叉搜索树类,我们必须使用递归来实现删除方法。这是给我们的代码。

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 并删除每个节点。

【问题讨论】:

  • 递归的一项要求是什么?它需要 _______,并且必须至少有一个 ___________。

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


【解决方案1】:

好吧,你的第一步是定位 X,记住你是通过递归来做的,所以你应该在它所在的子树上递归删除函数。 (如果 x

我建议画一棵树,然后将其视为一种算法。 :)

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

可能是兄弟姐妹?

.

记住 BST 的特性

.

递归!!!)

【讨论】:

  • 合理的回答...干得好,没有真正破坏作业
  • 同意,OP 需要自己解决这个问题,而不仅仅是得到答案......但是获得有关如何解决它的指示很有帮助
  • 谢谢,这很有帮助。当您说“递归删除函数”时,您实际上会返回递归吗?例如如果 x
  • 是的,你必须通过递归树返回最终值。
【解决方案2】:

pseudo_code method_recurse 需要参数:this_node

  1. 如果 this_node 为 None 则返回 None Found
  2. 如果 this_node 是目标,则返回 this_node
  3. 如果 this_node 小于目标,则返回 call self 并使用 this_node.right
  4. 如果 this_node 大于 target 则返回 call self 和 this_node.left

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2019-04-17
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多