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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 858b852537424054e0f43ea1e38c882800914064
4
- data.tar.gz: ec7199d8791374402d6ddb8061b0407173a3c3ab
3
+ metadata.gz: 71ed7cb85a58226543840c229b9c9ad0cbb3ca01
4
+ data.tar.gz: 78da18a04e8cb00a22f3cdaed3f9203e10ebce85
5
5
  SHA512:
6
- metadata.gz: c8997b23a4e67090afaa30ad789f175672cfd23768345453dcdb9876dbeab69f4232fd8e8d0279cc45319a397958ceedc1d37d6cecd744c16bca17e8ca888fbc
7
- data.tar.gz: 888077c978156150984763aa65d15418da28fe09530cab295c002754385bf95841b746e85d6adfc04acf2c7e73db40d068501da51b193ab337840383039be94c
6
+ metadata.gz: 21029ad91385da8b8368fb3e41d27b54c5cea8b2e6e12065284c8b62bd64cdcf43c5e6a18d1d327446e8e3a687c56ca4ef821a6bf5322ff0a7f42221d5941de9
7
+ data.tar.gz: 6e1a3ec11d9f2731ee71f454d3819e6b7008c5ee520c5c321bbb9b4cc5be2d4c16ba406f244e62e944a025533ff4638cb2253b99adbfcbde49e904be9370e25b
data/lib/BinarySearchk.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require "BinarySearchk/version"
2
- require 'BinarySearchk/BinarySearchk'
2
+ require 'BinarySearchk/tree'
3
+ require 'BinarySearchk/node'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module BinarySearchk
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -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
- tree = BinarySearchk::Node.new(10)
6
- expect(tree.value).to eq(10)
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 = BinarySearchk::Node.build_tree(arr)
12
- expect(tree.value).to eq(4)
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 = BinarySearchk::Node.build_tree(arr)
25
- expect(BinarySearchk::Node.breadth_first_search(7, tree)).to eq("Found 7")
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 = BinarySearchk::Node.build_tree(arr)
31
- expect(BinarySearchk::Node.depth_first_search(6345, tree)).to eq("Found 6345")
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 = BinarySearchk::Node.build_tree(arr)
37
- expect(BinarySearchk::Node.dfs_rec(9, tree)).to eq("Found 9")
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.2
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-24 00:00:00.000000000 Z
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/BinarySearchk.rb
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