On Monday's lecture, all we did was one function: deletion of data from BST from a certain node. In this function, we have several things to consider: if the node is None; using the BST characteristics to avoid unnecessary iterations; is the node a leaf or a internal node; what should we return?
So, when implementing the function, we should take all of these things into consideration. As Danny suggests, we should have a list of all the possible situations:
def delete(node, data):
''' (BTNode, data) -> BTNode
Delete, if it exists, node with data and return resulting tree.
>>> b = BTNode(8)
>>> b = insert(b, 4)
>>> b = insert(b, 2)
>>> b = insert(b, 6)
>>> b = insert(b, 12)
>>> b = insert(b, 14)
>>> b = insert(b, 10)
>>> b = delete(b, 12)
>>> print(b)
14
10
8
6
4
2
<BLANKLINE>
'''
# Algorithm for delete:
# 1. If this node is None, return that
# 2. If data is less than node.data, delete it from left child and
# return this node
# 3. If data is more than node.data, delete it from right child
# and return this node
# 4. If node with data has fewer than two children,
# and you know one is None, return the other one
# 5. If node with data has two non-None children,
# replace data with that of its largest child in the left subtree,
# and delete that child, and return this node
return_node = node
if node is None:
pass
elif node.data > data:
node.left = delete(node.left, data)
elif node.data < data:
node.right = delete(node.right, data)
elif node.left is None:
return_node = node.right
elif node.right is None:
return_node = node.left
else:
node.data = _find_max(node.left).data
node.left = delete(node.left, node.data)
return return_node
List a todo list and follows it. That is a good way to be thorough and organized.
没有评论:
发表评论