我正在教自己一些数据结构,我想知道这是否是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
答案 0 :(得分:1)
当您的代码到达节点102
时,它会决定转到正确的孩子,即110
。但是110
节点没有左子节点,例程返回当前节点(110
)。你宁可回归&#34;无&#34;在这种情况下(因为这里没有 floor(109)候选者),然后在上一级返回当前节点(即102
):如果它返回self._floor(node.right, key)
不是None
,否则返回node
。