In this week, I have learned something about mutating functions like insert and delete in Binary Search Tree.
First of all, I need to define class BTNode and BST. And I also need to initialize them.
class BTNode:
'''Binary Tree node.'''
def __init__(self, data, left=None, right=None):
''' (BTNode, object, BTNode, BTNode) -> NoneType
Create BTNode (self) with data and children left and right.
'''
self.data, self.left, self.right = data, left, right
Class BST:
'''Binary Search Tree node.'''
def __init__(self, root=None):
'''(BST, BTNode or None) -> Nonetype
Create BST with BTNode root.
'''
Self.root = root
Next, I mutate insert and delete methods.
def insert(node, data):
''' (BTNode, object) -> BTNode
Insert data in BST rooted at node if necessary, and return new root.
>>> 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)
>>> print(b)
14
12
10
8
6
4
2
<BLANKLINE>
'''
return_node = node
if not node:
return_node = BTNode(data)
elif data < node.data:
node.left = insert(node.left, data)
elif data > node.data:
node.right = insert(node.right, data)
else: # nothing to do
pass
return return_node
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>
'''
if not node:
pass
elif data < node.data:
node.left = delete(node.left, data)
elif data > node.data:
node.right = delete(node.right, data)
elif not node.left:
return_node = node.right
elif not node.right:
return_node = node.left
else:
node.data = _find_max(node.left).data
node.left = delete(node.left, node.data)
return return_node
没有评论:
发表评论