Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. class TreeNode(object):
  2.  
  3. def __init__(self, data = None, left=None, right=None):
  4. self.item = data
  5. self.left = left
  6. self.right = right
  7.  
  8. def __str__(self):
  9. return str(self.item)
  10.  
  11. from TreeNode import TreeNode
  12.  
  13.  
  14. class BST(object):
  15.  
  16. #------------------------------------------------------------
  17.  
  18. def __init__(self):
  19.  
  20. """create empty binary search tree
  21. post: empty tree created"""
  22.  
  23. self.root = None
  24.  
  25. def delete(self, item):
  26.  
  27. """remove item from binary search tree
  28. post: item is removed from the tree"""
  29.  
  30. self.root = self._subtreeDelete(self.root, item)
  31.  
  32. #------------------------------------------------------------
  33.  
  34. def _subtreeDelete(self, root, item):
  35.  
  36. if root is None: # Empty tree, nothing to do
  37. return None
  38. if item < root.item: # modify left
  39. root.left = self._subtreeDelete(root.left, item)
  40. elif item > root.item: # modify right
  41. root.right = self._subtreeDelete(root.right, item)
  42. else: # delete root
  43. if root.left is None: # promote right subtree
  44. root = root.right
  45. elif root.right is None: # promote left subtree
  46. root = root.left
  47. else:
  48. # root node can't be deleted, overwrite it with max of
  49. # left subtree and delete max node from the subtree
  50. root.item, root.left = self._subtreeDelMax(root.left)
  51. return root
  52.  
  53. def _subtreeDelMax(self, root):
  54.  
  55. if root.right is None: # root is the max
  56. return root.item, root.left # return max and promote left subtree
  57. else:
  58. # max is in right subtree, recursively find and delete it
  59. maxVal, root.right = self._subtreeDelMax(root.right)
  60. return maxVal, root
  61.  
  62. def treeSize(self, root, size = 0):
  63.  
  64. if root is None:
  65. return -1
  66.  
  67. if root is not None:
  68. self.size += 1
  69. if root.left is not None:
  70. self.treeSize(root.left, size)
  71. if root.right is not None:
  72. self.treeSize(root.right, size)
  73. return self.size
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement