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.
- checksums.yaml +15 -0
- data/lib/bst.rb +77 -0
- data/lib/bst/node.rb +16 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -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=
|
data/lib/bst.rb
ADDED
@@ -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
|
data/lib/bst/node.rb
ADDED
@@ -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:
|