Skip to content

Commit 5f2ae8b

Browse files
committed
exercism 78 Binary Search Tree
1 parent e1bdb58 commit 5f2ae8b

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ solution of many challenges of [Leetcode](https://leetcode.com/), [Exercism](htt
303303
75. [Crypto Square](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/crypto_square.rb)
304304
76. [List Ops](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/list_ops.rb)
305305
77. [Simple Linked List](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/simple_linked_list.rb)
306+
78. [Binary Search Tree](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/binary_search_tree.rb)
306307

307308
<a name="leetcode"/>
308309

exercism/binary_search_tree.rb

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Problem: https://exercism.org/tracks/ruby/exercises/binary-search-tree
2+
3+
# Solution
4+
class Bst
5+
include Enumerable
6+
NODE = Struct.new(:data,:left,:right)
7+
8+
def initialize(value)
9+
@root = NODE.new(value,nil,nil)
10+
end
11+
12+
def data
13+
@root.data
14+
end
15+
def left
16+
@root.left
17+
end
18+
def right
19+
@root.right
20+
end
21+
22+
def insert(element)
23+
current = @root
24+
prev = @root
25+
until current.nil?
26+
if current.data>=element
27+
prev = current
28+
current = current.left
29+
else
30+
prev = current
31+
current = current.right
32+
end
33+
end
34+
current = NODE.new(element,nil,nil)
35+
if prev.data >= element
36+
prev.left = current
37+
else
38+
prev.right = current
39+
end
40+
end
41+
42+
def each(&block)
43+
return to_enum(:each) unless block_given?
44+
inorder_traversal(@root,[]).each do |val|
45+
yield(val)
46+
end
47+
end
48+
49+
def inorder_traversal(node,arr)
50+
unless node.nil?
51+
inorder_traversal(node.left,arr)
52+
arr.push(node.data)
53+
inorder_traversal(node.right,arr)
54+
end
55+
arr
56+
end
57+
end

0 commit comments

Comments
 (0)