Skip to content

Commit 0198626

Browse files
committed
Added python implementation for creating a minimum height binary search tree, given a list of nodes
1 parent 05e4a1c commit 0198626

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

trees/min_height_bst.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
class Node:
2+
def __init__(self,data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
class BST:
8+
def __init__(self):
9+
self.root = None
10+
11+
def getRoot(self):
12+
return self.root
13+
14+
def add(self,data):
15+
if not self.root:
16+
self.root = Node(data)
17+
else:
18+
self._add(data,self.root)
19+
20+
def _add(self,data,node):
21+
if data <= node.data:
22+
if node.left:
23+
self._add(data,node.left)
24+
else:
25+
node.left = Node(data)
26+
else:
27+
if node.right:
28+
self._add(data,node.right)
29+
else:
30+
node.right = Node(data)
31+
32+
def find(self,data):
33+
if self.root:
34+
self._find(data,self.root)
35+
else:
36+
return None
37+
38+
def _find(data,node):
39+
if data == node.data:
40+
return node
41+
elif node.left and data <= node.data:
42+
return self._find(data,node.left)
43+
elif node.right and data > node.data:
44+
return self._find(data,node.right)
45+
46+
def inorder(self,node):
47+
if node:
48+
self.inorder(node.left)
49+
print node.data
50+
self.inorder(node.right)
51+
52+
53+
def create_min_bst(self,arr,start,end):
54+
if end < start:
55+
return
56+
mid = (start+end) / 2
57+
node = Node(arr[mid])
58+
self.add(node.data)
59+
print 'adding node: ',node.data
60+
node.left = self.create_min_bst(arr,start,mid-1)
61+
node.right = self.create_min_bst(arr,mid+1,end)
62+
63+
def get_height(self,node):
64+
if not node:
65+
return 0
66+
else:
67+
i = max(self.get_height(node.left),self.get_height(node.right)) + 1
68+
return i
69+
70+
def validate_bst(self):
71+
root = self.root
72+
diff = abs(self.get_height(root.left) - self.get_height(root.right))
73+
return diff
74+
75+
def main():
76+
B = BST()
77+
nodes = [1,2,3,4,5,6,7]
78+
B.create_min_bst(nodes,0,len(nodes)-1)
79+
B.inorder(B.root)
80+
81+
print B.validate_bst()
82+
83+
if __name__ == '__main__':
84+
main()

0 commit comments

Comments
 (0)