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 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