-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_seach_tree.py
60 lines (53 loc) · 1.88 KB
/
binary_seach_tree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from binary_tree import Node
class BinaryTreeStringList:
def __init__(self) -> None:
self.root: Node = None
self.connections: int = 0
self.stringList: list = []
def find(self, data):
'''
Worst case time complexity is O(n) since we can navigate the whole tree
'''
currentNode: Node = self.root
while currentNode:
if data == currentNode.getData():
return currentNode.getData()
if data < currentNode.getData():
currentNode = currentNode.getLeft()
else:
currentNode = currentNode.getRight()
self.connections += 1
return None
def all(self):
currentNode: Node = self.root
self.stringList: list = []
self.allNodes(self.root)
return self.stringList
def allNodes(self, currentNode: Node):
'''
Worst case time complexity is O(n) since we can navigate the whole tree
'''
while currentNode:
self.stringList.append(currentNode.getData())
if not currentNode.getLeft() is None:
return(self.allNodes(currentNode.getLeft()))
else:
return(self.allNodes(currentNode.getRight()))
def add(self, data):
self.insertNode(self.root, data)
def insertNode(self, root: Node, data: str):
node: Node = Node()
node.setData(data)
if self.root is None:
self.root = node
else:
if root.getData() > node.getData():
if root.getLeft() is None:
root.setLeft(node)
else:
return(self.insertNode(root.left, data))
else:
if root.getRight() is None:
root.setRight(node)
else:
return(self.insertNode(root.right, data))