BinarySearchk 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/BinarySearchk.rb +2 -1
- data/lib/BinarySearchk/node.rb +35 -0
- data/lib/BinarySearchk/tree.rb +54 -0
- data/lib/BinarySearchk/version.rb +1 -1
- data/spec/binarysearchk_spec.rb +15 -17
- metadata +4 -3
- data/lib/BinarySearchk/BinarySearchk.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71ed7cb85a58226543840c229b9c9ad0cbb3ca01
|
4
|
+
data.tar.gz: 78da18a04e8cb00a22f3cdaed3f9203e10ebce85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21029ad91385da8b8368fb3e41d27b54c5cea8b2e6e12065284c8b62bd64cdcf43c5e6a18d1d327446e8e3a687c56ca4ef821a6bf5322ff0a7f42221d5941de9
|
7
|
+
data.tar.gz: 6e1a3ec11d9f2731ee71f454d3819e6b7008c5ee520c5c321bbb9b4cc5be2d4c16ba406f244e62e944a025533ff4638cb2253b99adbfcbde49e904be9370e25b
|
data/lib/BinarySearchk.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
module NodeOfTree
|
2
|
+
class Node
|
3
|
+
attr_accessor :left, :right, :value
|
4
|
+
|
5
|
+
def initialize(v)
|
6
|
+
@value = v
|
7
|
+
@left = nil
|
8
|
+
@right = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def insert(v)
|
12
|
+
case value <=> v
|
13
|
+
when 1 then insert_left(v)
|
14
|
+
when -1 then insert_right(v)
|
15
|
+
when 0 then
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def insert_left(v)
|
20
|
+
if left.nil?
|
21
|
+
self.left = Node.new(v)
|
22
|
+
else
|
23
|
+
left.insert(v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def insert_right(v)
|
28
|
+
if right.nil?
|
29
|
+
self.right = Node.new(v)
|
30
|
+
else
|
31
|
+
right.insert(v)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module TreeWithNode
|
2
|
+
class Tree
|
3
|
+
attr_accessor :parent
|
4
|
+
|
5
|
+
def initialize(array)
|
6
|
+
@tree = build_tree(array)
|
7
|
+
@parent = @tree.value
|
8
|
+
end
|
9
|
+
|
10
|
+
def breadth_first_search(target_value)
|
11
|
+
queue = [@tree]
|
12
|
+
until queue.empty?
|
13
|
+
current_node = queue.shift
|
14
|
+
return "Found #{current_node.value}" if current_node.value == target_value
|
15
|
+
queue.push current_node.left unless current_node.left.nil?
|
16
|
+
queue.push current_node.right unless current_node.right.nil?
|
17
|
+
end
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def depth_first_search(target_value)
|
22
|
+
stack = [@tree]
|
23
|
+
until stack.empty?
|
24
|
+
current_node = stack.pop
|
25
|
+
return "Found #{current_node.value}" if current_node.value == target_value
|
26
|
+
stack.push current_node.right unless current_node.right.nil?
|
27
|
+
stack.push current_node.left unless current_node.left.nil?
|
28
|
+
end
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def dfs_rec(target_value, node = @tree)
|
33
|
+
if node.nil?
|
34
|
+
return nil
|
35
|
+
else
|
36
|
+
return "Found #{node.value}" if node.value == target_value
|
37
|
+
search_left_child = dfs_rec(target_value, node.left)
|
38
|
+
search_right_child = dfs_rec(target_value, node.right)
|
39
|
+
end
|
40
|
+
return (search_right_child or search_left_child)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def build_tree(array)
|
46
|
+
right = array.length-1
|
47
|
+
left=0
|
48
|
+
index_mid = (left + (right-left)) / 2
|
49
|
+
tree = NodeOfTree::Node.new(array[index_mid])
|
50
|
+
array.each {|n| tree.insert(n) }
|
51
|
+
tree
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/binarysearchk_spec.rb
CHANGED
@@ -2,39 +2,37 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe BinarySearchk do
|
4
4
|
it 'creates a node with value 10' do
|
5
|
-
|
6
|
-
|
5
|
+
node = NodeOfTree::Node.new(10)
|
6
|
+
node.left = 3
|
7
|
+
node.right = 11
|
8
|
+
expect(node.value).to eq(10)
|
9
|
+
expect(node.left).to eq(3)
|
10
|
+
expect(node.right).to eq(11)
|
7
11
|
end
|
8
12
|
|
9
13
|
it 'creates a tree with children' do
|
10
14
|
arr = [1, 7, 4, 23, 8, 9, 4, 3, 5, 7, 9, 67, 6345, 324]
|
11
|
-
tree =
|
12
|
-
expect(tree.
|
13
|
-
expect("#{tree.left.value if !tree.left.nil?}").to eq("1")
|
14
|
-
expect("#{tree.right.value unless tree.right.nil?}").to eq("7")
|
15
|
-
expect("#{tree.left.left.value unless tree.left.left.nil?}").to eq("")
|
16
|
-
expect("#{tree.left.right.value unless tree.left.right.nil?}").to eq("3")
|
17
|
-
expect("#{tree.right.left.value unless tree.right.left.nil?}").to eq("5")
|
18
|
-
expect("#{tree.right.right.value unless tree.right.right.nil?}").to eq("23")
|
19
|
-
expect("#{tree.right.right.left.value unless tree.right.right.left.nil?}").to eq("8")
|
15
|
+
tree = TreeWithNode::Tree.new(arr)
|
16
|
+
expect(tree.parent).to eq(4)
|
20
17
|
end
|
21
18
|
|
22
19
|
it 'Uses BFS to search for a number' do
|
23
20
|
arr = [1, 7, 4, 23, 8, 9, 4, 3, 5, 7, 9, 67, 6345, 324]
|
24
|
-
tree =
|
25
|
-
|
21
|
+
tree = TreeWithNode::Tree.new(arr)
|
22
|
+
# tree = BinarySearchk::Node.build_tree(arr)
|
23
|
+
expect(tree.breadth_first_search(4)).to eq("Found 4")
|
26
24
|
end
|
27
25
|
|
28
26
|
it 'Uses DFS to search for a number' do
|
29
27
|
arr = [1, 7, 4, 23, 8, 9, 4, 3, 5, 7, 9, 67, 6345, 324]
|
30
|
-
tree =
|
31
|
-
expect(
|
28
|
+
tree = TreeWithNode::Tree.new(arr)
|
29
|
+
expect(tree.depth_first_search(6345)).to eq("Found 6345")
|
32
30
|
end
|
33
31
|
|
34
32
|
it 'Uses recursive DFS to search for a number' do
|
35
33
|
arr = [1, 7, 4, 23, 8, 9, 4, 3, 5, 7, 9, 67, 6345, 324]
|
36
|
-
tree =
|
37
|
-
expect(
|
34
|
+
tree = TreeWithNode::Tree.new(arr)
|
35
|
+
expect(tree.dfs_rec(9)).to eq("Found 9")
|
38
36
|
end
|
39
37
|
|
40
38
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: BinarySearchk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kayode Adeniyi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,7 +68,8 @@ files:
|
|
68
68
|
- README.md
|
69
69
|
- Rakefile
|
70
70
|
- lib/BinarySearchk.rb
|
71
|
-
- lib/BinarySearchk/
|
71
|
+
- lib/BinarySearchk/node.rb
|
72
|
+
- lib/BinarySearchk/tree.rb
|
72
73
|
- lib/BinarySearchk/version.rb
|
73
74
|
- spec/binarysearchk_spec.rb
|
74
75
|
- spec/spec_helper.rb
|
@@ -1,81 +0,0 @@
|
|
1
|
-
module BinarySearchk
|
2
|
-
class Node
|
3
|
-
attr_accessor :left, :right, :value
|
4
|
-
|
5
|
-
def initialize(v=nil)
|
6
|
-
@value = v
|
7
|
-
@left = nil
|
8
|
-
@right = nil
|
9
|
-
end
|
10
|
-
|
11
|
-
def insert(v)
|
12
|
-
case value <=> v
|
13
|
-
when 1 then insert_left(v)
|
14
|
-
when -1 then insert_right(v)
|
15
|
-
when 0 then false
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def insert_left(v)
|
20
|
-
if left.nil?
|
21
|
-
self.left = Node.new(v)
|
22
|
-
else
|
23
|
-
left.insert(v)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def insert_right(v)
|
28
|
-
if right.nil?
|
29
|
-
self.right = Node.new(v)
|
30
|
-
else
|
31
|
-
right.insert(v)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.build_tree(array)
|
36
|
-
right = array.length-1
|
37
|
-
left=0
|
38
|
-
|
39
|
-
index_mid = (left + (right-left)) / 2
|
40
|
-
@node = Node.new(array[index_mid])
|
41
|
-
array.each {|v| @node.insert(v) }
|
42
|
-
|
43
|
-
@node
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.breadth_first_search(target_value, node)
|
47
|
-
queue = [node]
|
48
|
-
until queue.empty?
|
49
|
-
current_node = queue.shift
|
50
|
-
return "Found #{current_node.value}" if current_node.value == target_value
|
51
|
-
queue.push current_node.left unless current_node.left.nil?
|
52
|
-
queue.push current_node.right unless current_node.right.nil?
|
53
|
-
end
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.depth_first_search(target_value, node)
|
58
|
-
stack = [node]
|
59
|
-
until stack.empty?
|
60
|
-
current_node = stack.pop
|
61
|
-
return "Found #{current_node.value}" if current_node.value == target_value
|
62
|
-
stack.push current_node.right unless current_node.right.nil?
|
63
|
-
stack.push current_node.left unless current_node.left.nil?
|
64
|
-
end
|
65
|
-
nil
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.dfs_rec(target_value, node)
|
69
|
-
if node.nil?
|
70
|
-
return nil
|
71
|
-
else
|
72
|
-
return "Found #{node.value}" if node.value == target_value
|
73
|
-
search_left_child = dfs_rec(target_value, node.left)
|
74
|
-
search_right_child = dfs_rec(target_value, node.right)
|
75
|
-
end
|
76
|
-
#return any of the two that is not nil
|
77
|
-
return (search_right_child or search_left_child)
|
78
|
-
nil
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|