当我要删除的节点是根节点或叶节点时,我已经结束了,但是当我有兄弟姐妹或孩子时,我也必须能够删除,这对我来说很难。 / p>
SELECT array_agg(e order by id)
FROM unnest( array[1, 2, 3, 4, 7, 6] ) with ordinality as s1(e,id)
WHERE not exists
(
SELECT 1 FROM unnest(array[2, 3, 7]) as s2(e)
where s2.e = s1.e
)
我发布了整个代码,因此,如果有人愿意在自己的机器上进行测试,或者有人可以将其用于教育目的,则可以这样做。
答案 0 :(得分:0)
将来尝试进行一些调试,并提供一些示例输出和预期输出。
请考虑以下
def _remove(self, key, node):
if node == None:
return None
if key == node.key:
if node.left and not node.right: # only left
return node.left
elif node.right and not node.left: # only right
return node.right
elif not node.right and not node.left: # neither
return None
else : # both
inorder_successor = node.right
while inorder_successor.left:
inorder_successor = inorder_successor.left
# remember to replace inorder_successor with it's right child
...
...
return inorder_successor
# iterates recursively in the bst
elif key <= node.key:
node.left = self._remove(key, node.left)
else:
node.right = self._remove(key, node.right)
return node
关于变化的一些观察
None
检查is != None
,这是一种非Python的方式。只需检查is
和is not
即可