Skip to content

Commit 336ce9a

Browse files
committed
min heap
1 parent 70e1c96 commit 336ce9a

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

min_heap/min_heap.rb

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require_relative 'node'
2+
require 'thread'
3+
require 'pry'
4+
require 'byebug'
5+
6+
class MinHeap
7+
8+
attr_reader :root
9+
attr_reader :count
10+
attr_reader :row_number
11+
12+
def initialize(root)
13+
@root = root
14+
@count = 1
15+
end
16+
17+
def insert(root, node)
18+
end
19+
20+
def delete(root, data)
21+
end
22+
23+
def find(root, data)
24+
end
25+
26+
def printf(node)
27+
end
28+
end

min_heap/min_heap_spec.rb

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
include RSpec
2+
3+
require_relative 'min_heap'
4+
5+
RSpec.describe MinHeap, type: Class do
6+
let (:root) { Node.new("The Matrix", 87) }
7+
8+
let (:tree) { MinHeap.new(root) }
9+
let (:node1) { Node.new("Pacific Rim", 72) }
10+
let (:node2) { Node.new("Braveheart", 78) }
11+
let (:node3) { Node.new("Star Wars: Return of the Jedi", 80) }
12+
let (:node4) { Node.new("Donnie Darko", 85) }
13+
let (:node5) { Node.new("Inception", 86) }
14+
let (:node6) { Node.new("District 9", 90) }
15+
let (:node7) { Node.new("The Shawshank Redemption", 91) }
16+
let (:node8) { Node.new("The Martian", 92) }
17+
let (:node9) { Node.new("Star Wars: A New Hope", 93) }
18+
let (:node10) { Node.new("Star Wars: The Empire Strikes Back", 94) }
19+
let (:node11) { Node.new("Mad Max 2: The Road Warrior", 98) }
20+
describe "#insert(data)" do
21+
it "properly inserts a new node as a left-right child" do
22+
tree.insert(root, node4) #85
23+
tree.insert(root, node5) #86
24+
tree.insert(root, node6) #90
25+
tree.insert(root, node2) #78
26+
expect(root.rating).to eq 78
27+
expect(root.left.rating).to eq 85
28+
expect(root.right.rating).to eq 86
29+
expect(root.left.left.rating).to eq 90
30+
expect(root.left.right.rating).to eq 87
31+
end
32+
33+
it "properly inserts a new node as a right-left child" do
34+
tree.insert(root, node9) #93
35+
tree.insert(root, node8) #92
36+
tree.insert(root, node2) #78
37+
tree.insert(root, node5) #86
38+
tree.insert(root, node11) #98
39+
expect(root.rating).to eq 78
40+
expect(root.left.rating).to eq 86
41+
expect(root.right.rating).to eq 92
42+
expect(root.left.left.rating).to eq 93
43+
expect(root.left.right.rating).to eq 87
44+
expect(root.right.left.rating).to eq 98
45+
end
46+
end
47+
48+
describe "#find(data)" do
49+
it "properly finds a left-right node" do
50+
tree.insert(root, node2) #78
51+
tree.insert(root, node4) #85
52+
tree.insert(root, node5) #86
53+
tree.insert(root, node6) #90
54+
expect(tree.find(root, node6.rating).rating).to eq 90
55+
end
56+
57+
it "properly finds a right-left node" do
58+
tree.insert(root, node2) #78
59+
tree.insert(root, node5) #86
60+
tree.insert(root, node11) #98
61+
tree.insert(root, node9) #93
62+
tree.insert(root, node8) #92
63+
expect(tree.find(root, node8.rating).rating).to eq 92
64+
end
65+
end
66+
67+
describe "#delete(data)" do
68+
it "properly deletes a left-right node" do
69+
tree.insert(root, node6) #90
70+
tree.insert(root, node2) #78
71+
tree.insert(root, node4) #85
72+
tree.insert(root, node5) #86
73+
tree.delete(root, node5.rating)
74+
expect(tree.find(root, node5.rating).rating).to be_nil
75+
end
76+
77+
it "properly deletes a right-left node" do
78+
tree.insert(root, node9) #93
79+
tree.insert(root, node8) #92
80+
tree.insert(root, node2) #78
81+
tree.insert(root, node5) #86
82+
tree.insert(root, node11) #98
83+
tree.delete(root, node11.rating)
84+
expect(tree.find(root, node11.rating).rating).to be_nil
85+
end
86+
end
87+
88+
describe "#printf" do
89+
specify {
90+
expected_output = "Pacific Rim: 72\nBraveheart: 78\nStar Wars: Return of the Jedi: 80\nThe Matrix: 87\nDistrict 9: 90\nStar Wars: The Empire Strikes Back: 94\nInception: 86\nStar Wars: A New Hope: 93\nThe Shawshank Redemption: 91\nThe Martian: 92\nMad Max 2: The Road Warrior: 98\n"
91+
tree.insert(root, node9) #93
92+
tree.insert(root, node10) #94
93+
tree.insert(root, node3) #80
94+
tree.insert(root, node8) #92
95+
tree.insert(root, node1) #72
96+
tree.insert(root, node5) #86
97+
tree.insert(root, node2) #78
98+
tree.insert(root, node7) #91
99+
tree.insert(root, node6) #90
100+
tree.insert(root, node11) #98
101+
expect { tree.printf }.to output(expected_output).to_stdout
102+
}
103+
end
104+
end

min_heap/node.rb

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Node
2+
attr_accessor :title
3+
attr_accessor :rating
4+
attr_accessor :left
5+
attr_accessor :right
6+
attr_accessor :parent
7+
8+
def initialize(title, rating)
9+
@title = title
10+
@rating = rating
11+
end
12+
end

0 commit comments

Comments
 (0)