bst 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.
Files changed (4) hide show
  1. checksums.yaml +15 -0
  2. data/lib/bst.rb +77 -0
  3. data/lib/bst/node.rb +16 -0
  4. metadata +46 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDRjODljNDVmZTVkZmY5MzkxZThmYzEzMjIzYmYzZDU5ZTBlZTJkZg==
5
+ data.tar.gz: !binary |-
6
+ ODg5NWE1MzU5MWZjMTY5YmZlMWM0MzM0MjFhYzQ1NjYwYjQ4YzM2Yg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MWYyZGYzNjIxYzZkYzFmNzY5N2FlYzdhM2RkYzgzNTBiYzZkYjA4Njg2Zjc2
10
+ YTUyODk0OTE2ZGJhMTI3MjQzMTY2M2ZhMjNlODAxZDc0YjczNDJjNTQ0NDQ5
11
+ YmI5NzUwNWMxODYzZmM1ODI4MjUwYzM4YzAzMTdlN2RmMTBmODM=
12
+ data.tar.gz: !binary |-
13
+ ZWY3NjE3ZWY5MmE5MTM2ZGQ3YTI2OTMyMjIwNjc0MzZlYzM4NTI4Y2ZiZmVj
14
+ YjE2YmIxMjM4NmZkNzZhZTUzYjY1OWUxYzEyM2Y5MGYwNDgyZGIxOTJhOTRh
15
+ Y2FhYjg3NTkwODg5YThlODhlY2JlMmIxYzU2OWNlODRjZjllY2U=
@@ -0,0 +1,77 @@
1
+ require_relative 'bst/node'
2
+ class BST
3
+
4
+ attr_accessor :head
5
+ attr_accessor :comparator
6
+
7
+ def initialize(comparator)
8
+ self.comparator = comparator
9
+ self.head = nil
10
+ end
11
+
12
+ def push(new_object,is_right=1,parent=nil)
13
+ new_node = Node.new(new_object)
14
+ if parent.nil?
15
+ runner = self.head
16
+ elsif is_right == 1
17
+ runner = parent.right_node
18
+ else
19
+ runner = parent.left_node
20
+ end
21
+ if runner.nil? && parent.nil?
22
+ self.head = new_node
23
+ elsif runner.nil? && !parent.nil?
24
+ parent.right_node = new_node if is_right == 1
25
+ parent.left_node = new_node if is_right == -1
26
+ else
27
+ result = self.comparator.call runner.content, new_node.content
28
+ self.push(new_object,result,runner)
29
+ end
30
+ end
31
+
32
+ def prefix(runner = nil, parent = nil, content_array = [])
33
+ runner = self.head if runner.nil? && parent.nil?
34
+ if runner.nil? && parent.nil?
35
+ return content_array
36
+ elsif runner.nil? && !parent.nil?
37
+ content_array += []
38
+ else
39
+ content_array += [runner.content]
40
+ content_array = prefix(runner.left_node, runner, content_array)
41
+ content_array = prefix(runner.right_node, runner, content_array)
42
+ end
43
+ content_array
44
+ end
45
+
46
+ def infix(runner = nil, parent = nil, content_array = [])
47
+ runner = self.head if runner.nil? && parent.nil?
48
+ if runner.nil? && parent.nil?
49
+ return content_array
50
+ elsif runner.nil? && !parent.nil?
51
+ content_array += []
52
+ else
53
+ content_array = infix(runner.left_node, runner, content_array)
54
+ content_array += [runner.content]
55
+ content_array = infix(runner.right_node, runner, content_array)
56
+ end
57
+ content_array
58
+ end
59
+
60
+ def postfix(runner = nil, parent = nil, content_array = [])
61
+ runner = self.head if runner.nil? && parent.nil?
62
+ if runner.nil? && parent.nil?
63
+ return content_array
64
+ elsif runner.nil? && !parent.nil?
65
+ content_array += []
66
+ else
67
+ content_array = postfix(runner.left_node, runner, content_array)
68
+ content_array = postfix(runner.right_node, runner, content_array)
69
+ content_array += [runner.content]
70
+ end
71
+ content_array
72
+ end
73
+
74
+ def remove_head
75
+
76
+ end
77
+ end
@@ -0,0 +1,16 @@
1
+ class Node
2
+ attr_accessor :left_node
3
+ attr_accessor :right_node
4
+ attr_accessor :content
5
+
6
+ def initialize(content)
7
+ if content.class == Node
8
+ self.content = content.content
9
+ else
10
+ self.content = content
11
+ end
12
+ self.left_node = nil
13
+ self.right_node = nil
14
+ end
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bst
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Maher El-Atawy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: An out of the box implementation of binary search tree
14
+ email: maher.atawy@accorpa.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/bst.rb
20
+ - lib/bst/node.rb
21
+ homepage: http://rubygems.org/gems/bst
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.4.6
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Implementation for Binary Search Tree
45
+ test_files: []
46
+ has_rdoc: