Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. from collections import deque
  2.  
  3.  
  4. class Node:
  5. def __init__(self, value, lchild=None, rchild=None):
  6. self.value = value
  7. self.lchild = lchild
  8. self.rchild = rchild
  9.  
  10.  
  11. class BT:
  12. def __init__(self, root=None):
  13. self.level = deque()
  14. self.root = root
  15. self.q = deque()
  16.  
  17. def __find(self, item, parent):
  18. if not parent:
  19. return False
  20.  
  21. if parent.value == item:
  22. return True
  23.  
  24. if parent.value > item:
  25. return self.__find(item, parent.lchild)
  26. elif parent.value < item:
  27. return self.__find(item, parent.rchild)
  28.  
  29. def find(self, item):
  30. return self.__find(item, self.root)
  31.  
  32. def __contains__(self, item):
  33. return self.find(item)
  34.  
  35. def __insert(self, val, parent):
  36. if val <= parent.value:
  37. if parent.lchild is None:
  38. parent.lchild = Node(val)
  39. else:
  40. self.__insert(val, parent.lchild)
  41.  
  42. if val > parent.value:
  43. if parent.rchild is None:
  44. parent.rchild = Node(val)
  45. else:
  46. self.__insert(val, parent.rchild)
  47.  
  48. def add(self, val):
  49. if self.root is None:
  50. self.root = Node(val)
  51. else:
  52. self.__insert(val, self.root)
  53.  
  54. return self
  55.  
  56. def traverse_depth(self, parent=None):
  57. if parent is None:
  58. self.q.clear()
  59. parent = self.root
  60.  
  61. if parent is None:
  62. return
  63.  
  64. if parent.lchild:
  65. self.traverse_depth(parent.lchild)
  66.  
  67. # print(parent.value)
  68. self.q.append(parent)
  69.  
  70. if parent.rchild:
  71. self.traverse_depth(parent.rchild)
  72.  
  73. def traverse_breadth(self, parent=None):
  74. if not parent and self.root:
  75. self.q.clear()
  76. self.level.clear()
  77. parent = self.root
  78. self.level.append(parent)
  79.  
  80. if parent is None:
  81. return
  82.  
  83. current_node = self.level.popleft()
  84.  
  85. while current_node:
  86. self.q.append(current_node)
  87.  
  88. if current_node.lchild:
  89. self.level.append(current_node.lchild)
  90. if current_node.rchild:
  91. self.level.append(current_node.rchild)
  92.  
  93. if len(self.level) > 0:
  94. current_node = self.level.popleft()
  95. else:
  96. current_node = None
  97.  
  98. def print_traversal(self):
  99. for node in self.q:
  100. print(node.value)
  101.  
  102.  
  103. # Example Data
  104. # 50
  105. # 25 75
  106. # 12 37 63 87
  107. # 6 18 31 44 57 69 81 93
  108.  
  109.  
  110. bt = BT()
  111. bt.add(50).add(25).add(75).add(12).add(37).add(63) \
  112. .add(87).add(6).add(18).add(31).add(44).add(57) \
  113. .add(69).add(81).add(93)
  114.  
  115. print('DFS')
  116. bt.traverse_depth()
  117. bt.print_traversal()
  118.  
  119. print('BFS')
  120. bt.traverse_breadth()
  121. bt.print_traversal()
  122.  
  123. print('bsearch')
  124. print(f'{63 in bt}')
  125. print(f'{23 in bt}')
  126. print(f'{93 in bt}')
  127. print(f'{6 in bt}')
  128. print(f'{45 in bt}')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement