bst 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: