BinarySearchk 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|