BST中的楼层功能,这是实施还是我错误地了解它的使用?

时间:2015-12-04 13:05:46

标签: python binary-search-tree

我正在教自己一些数据结构,我想知道这是否是BST中楼层功能的正确实现?我会切入追逐......

def floor(self, key):
    if self.root == None:
        return False

    return self._floor(self.root, key)

def _floor(self, node, key):
    if key == node.key:
        return node

    if key < node.key:
        if node.left == None:
            return node

        return self._floor(node.left, key)

    if node.right == None:
        return node

    return self._floor(node.right, key)

以上是我如何实现该功能,这似乎工作正常。但是我写了一些单元测试,其中一个是失败的。

def test_floor_NoLeftSubTree_HighestElementLowerThanValueReturned(self):
    # Arrange
    self.tree.insert(100)
    self.tree.insert(102)
    self.tree.insert(101)
    self.tree.insert(110)
    self.tree.insert(115)
    self.tree.insert(120)
    self.tree.insert(130)

    # Act, Assert
    self.assertEqual(self.tree.floor(109).key, 102)

我只是想澄清我的理解是正确的。上面的测试失败了,因为它返回110而不是102.我认为它应该返回102.任何正确方向的推动都会有所帮助,谢谢...

我从this文件中学习。

修改 这就是我认为树应该看起来的样子。

                    100
                        102
                    101     110
                                115
                                    120
                                        130

1 个答案:

答案 0 :(得分:1)

当您的代码到达节点102时,它会决定转到正确的孩子,即110。但是110节点没有左子节点,例程返回当前节点(110)。你宁可回归&#34;无&#34;在这种情况下(因为这里没有 floor(109)候选者),然后在上一级返回当前节点(即102):如果它返回self._floor(node.right, key)不是None,否则返回node