binary_tree 1.0.0 → 1.0.1
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 +4 -4
- data/lib/binary_tree.rb +107 -73
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5384a303df8f020e5d485035b1a573ac5f0d842abe2f43da3e34ff20977ab9a
|
4
|
+
data.tar.gz: 392f293f44752192f3b30b63c1c38b06ffde5bdf2e9575d6c69e9e6b163fab9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11a535d640b5318ff14a550766fc4ecf6f3ad9c41eb6227eea7023ffc7f722604572cfbb3931ba0a42f14f9841d6cf7249f3d3961666bcb44d9784d7e68cdfb7
|
7
|
+
data.tar.gz: b5e223db5b68ca242e472bc74767f71951373a6e8316cb4c4892e738e49c53c42046bd14307f5ee7c41c70a0df0bac0b0a364d0e48b9af2f0c52df5076dcaf57
|
data/lib/binary_tree.rb
CHANGED
@@ -1,80 +1,114 @@
|
|
1
1
|
class BinaryTree
|
2
|
-
|
3
|
-
|
2
|
+
attr_reader :data
|
3
|
+
attr_accessor :left, :right, :root
|
4
|
+
|
5
|
+
def initialize(data=nil)
|
6
|
+
@data = data
|
7
|
+
@left = nil
|
8
|
+
@right = nil
|
9
|
+
end
|
4
10
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
11
|
+
# insert data in binary tree node
|
12
|
+
def insert(node, data)
|
13
|
+
q = []
|
14
|
+
if node == nil
|
15
|
+
@root = BinaryTree.new(data)
|
16
|
+
return @root
|
17
|
+
end
|
18
|
+
q.push(node)
|
19
|
+
while (!q.empty?)
|
20
|
+
node = q.shift
|
21
|
+
if node.left == nil
|
22
|
+
node.left = BinaryTree.new(data)
|
23
|
+
break
|
24
|
+
else
|
25
|
+
q.push(node.left)
|
26
|
+
end
|
27
|
+
if node.right == nil
|
28
|
+
node.right = BinaryTree.new(data)
|
29
|
+
break
|
30
|
+
else
|
31
|
+
q.push(node.right)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
return node
|
35
|
+
end
|
10
36
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
q.push(node)
|
19
|
-
while (!q.empty?)
|
20
|
-
node = q.shift
|
21
|
-
if node.left == nil
|
22
|
-
node.left = BinaryTree.new(data)
|
23
|
-
break
|
24
|
-
else
|
25
|
-
q.push(node.left)
|
26
|
-
end
|
27
|
-
if node.right == nil
|
28
|
-
node.right = BinaryTree.new(data)
|
29
|
-
break
|
30
|
-
else
|
31
|
-
q.push(node.right)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
return node
|
35
|
-
end
|
36
|
-
|
37
|
-
# print data in inorder form (left, root, right)
|
38
|
-
def inorder(node)
|
39
|
-
if node == nil
|
40
|
-
return
|
41
|
-
end
|
42
|
-
inorder(node.left)
|
43
|
-
puts "#{node.data}"
|
44
|
-
inorder(node.right)
|
45
|
-
end
|
37
|
+
# print data in inorder form (left, root, right)
|
38
|
+
def inorder(node)
|
39
|
+
return if node == nil
|
40
|
+
inorder(node.left)
|
41
|
+
print "#{node.data} "
|
42
|
+
inorder(node.right)
|
43
|
+
end
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
45
|
+
# print data in preorder form (root, left, right)
|
46
|
+
def preorder(node)
|
47
|
+
return if node == nil
|
48
|
+
print "#{node.data} "
|
49
|
+
preorder(node.left)
|
50
|
+
preorder(node.right)
|
51
|
+
end
|
52
|
+
|
53
|
+
# print data in postorder for (left, right, root)
|
54
|
+
def postorder(node)
|
55
|
+
return if node == nil
|
56
|
+
postorder(node.left)
|
57
|
+
postorder(node.right)
|
58
|
+
print "#{node.data} "
|
59
|
+
end
|
56
60
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
# Postorder traversal using two stack in binary tree
|
62
|
+
def postorder_iterative(node)
|
63
|
+
return if node == nil
|
64
|
+
s1 = []
|
65
|
+
s2 = []
|
66
|
+
s1.push(node)
|
67
|
+
while(!s1.empty?)
|
68
|
+
node = s1.pop
|
69
|
+
s2.push(node)
|
70
|
+
if node.left != nil
|
71
|
+
s1.push(node.left)
|
72
|
+
end
|
73
|
+
if node.right != nil
|
74
|
+
s1.push(node.right)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
while(!s2.empty?)
|
78
|
+
node = s2.pop
|
79
|
+
print "#{node.data} "
|
80
|
+
end
|
81
|
+
puts ""
|
82
|
+
end
|
83
|
+
|
84
|
+
#level order tree traversal
|
85
|
+
def levelorder(node)
|
86
|
+
return if node == nil
|
87
|
+
q = []
|
88
|
+
q.push(node)
|
89
|
+
while(!q.empty?)
|
90
|
+
node = q.shift
|
91
|
+
if node.left != nil
|
92
|
+
q.push(node.left)
|
93
|
+
end
|
94
|
+
if node.right != nil
|
95
|
+
q.push(node.right)
|
96
|
+
end
|
97
|
+
print "#{node.data} "
|
98
|
+
end
|
99
|
+
end
|
66
100
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
101
|
+
# For test
|
102
|
+
def test_binary_tree
|
103
|
+
for i in 1..5 do
|
104
|
+
BinaryTree.new.insert(@@root, rand(100))
|
105
|
+
end
|
106
|
+
puts "inorder : "
|
107
|
+
inorder(@root)
|
108
|
+
puts "preorder : "
|
109
|
+
preorder(@root)
|
110
|
+
puts "postorder : "
|
111
|
+
postorder(@root)
|
112
|
+
end
|
79
113
|
|
80
|
-
end
|
114
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: binary_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- shubham jain
|
@@ -10,7 +10,7 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2020-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: A simple binary tree gem
|
13
|
+
description: A simple binary tree gem with level order, postorder tree traversal
|
14
14
|
email: shubhammpdgj@gmail.com
|
15
15
|
executables: []
|
16
16
|
extensions: []
|