File tree Expand file tree Collapse file tree 2 files changed +105
-0
lines changed
Expand file tree Collapse file tree 2 files changed +105
-0
lines changed Original file line number Diff line number Diff line change 1+ class Node :
2+ data = 0
3+ level = 0
4+ child = None
5+ parent = None
6+ right = None
7+
8+ def __init__ (self , key ):
9+ self .data = key
10+ self .level = 0
11+ self .child = None
12+ self .parent = None
13+ self .right = None
14+
15+ def __str__ (self ):
16+ return str (self .data )
17+
18+
19+ class BHeap :
20+ trees = []
21+
22+ def __init__ (self , trees ):
23+ self .trees = trees
24+
25+ def insert (self , key ):
26+ node = Node (key )
27+ self .merge (BHeap ([node ]))
28+
29+ def find_min (self ):
30+ mn = 10 ** 10
31+ for tree in self .trees :
32+ mn = min (tree .data , mn )
33+
34+ if mn == 10 ** 10 :
35+ print ("No min" )
36+ return
37+
38+ return mn
39+
40+ def merge (self , heap ):
41+ self .trees .extend (heap .trees )
42+
43+
44+ def extract_min (self ):
45+ mn = 10 ** 10
46+ min_node = None
47+ for tree in self .trees :
48+ if tree .data < mn :
49+ mn = tree .data
50+ min_node = tree
51+
52+ if mn == 10 ** 10 :
53+ print ("No min" )
54+ return
55+
56+ self .trees .remove (min_node )
57+
58+ if min_node .child :
59+ self .merge (BHeap (min_node .child ))
60+
61+ return min_node .data
62+
63+ def __str__ (self ):
64+ res = ""
65+ for tree in self .trees :
66+ res += str (tree ) + " "
67+ return res
68+
69+
70+ if __name__ == "__main__" :
71+ heap = BHeap ([])
72+
73+ print (heap .find_min ())
74+ print (heap .extract_min ())
75+
76+
77+ heap .insert (10 )
78+ heap .insert (20 )
79+ heap .insert (30 )
80+
81+ print (heap )
82+ print (heap .find_min ())
83+ print (heap .extract_min ())
84+ print (heap )
85+
86+ print (heap .extract_min ())
87+ print (heap )
88+
89+
90+
Original file line number Diff line number Diff line change 1+ import pytest
2+ import bheap
3+
4+ def test_min ():
5+ heap = bheap .BHeap ([])
6+
7+ heap .insert (10 )
8+ heap .insert (20 )
9+ heap .insert (30 )
10+
11+ assert heap .find_min () == 10
12+
13+
14+ if __name__ == "__main__" :
15+ pytest .main ()
You can’t perform that action at this time.
0 commit comments