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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/binary_tree.rb +107 -73
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a73fe5ef37eeaa90d7c7efff8c1c0d4663f6e9daf07637ba692565c29884d96
4
- data.tar.gz: cf740fedf52fb09de5a892c91e8ed041853173d4920993fdd3760d61ca124ddb
3
+ metadata.gz: e5384a303df8f020e5d485035b1a573ac5f0d842abe2f43da3e34ff20977ab9a
4
+ data.tar.gz: 392f293f44752192f3b30b63c1c38b06ffde5bdf2e9575d6c69e9e6b163fab9a
5
5
  SHA512:
6
- metadata.gz: de486b01b6696c1bf78efccc4b63fc2017ff71afd54b9b178d5e0cf791e6d3902e10e264730bbf566e221cff8d91ca7b14270c6cdebac5a50387495faae4f27b
7
- data.tar.gz: 527d264a819c51f6d5cb8f1bbd7d685aba90e172c264ad41232d2925013a4db1a9e4d7827ca33715de757276a81b5bd46eabe61aed63e82d21bff623e67a2843
6
+ metadata.gz: 11a535d640b5318ff14a550766fc4ecf6f3ad9c41eb6227eea7023ffc7f722604572cfbb3931ba0a42f14f9841d6cf7249f3d3961666bcb44d9784d7e68cdfb7
7
+ data.tar.gz: b5e223db5b68ca242e472bc74767f71951373a6e8316cb4c4892e738e49c53c42046bd14307f5ee7c41c70a0df0bac0b0a364d0e48b9af2f0c52df5076dcaf57
@@ -1,80 +1,114 @@
1
1
  class BinaryTree
2
- attr_reader :data
3
- attr_accessor :left, :right, :root
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
- def initialize(data=nil)
6
- @data = data
7
- @left = nil
8
- @right = nil
9
- end
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
- # 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
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
- # print data in preorder form (root, left, right)
48
- def preorder(node)
49
- if node == nil
50
- return
51
- end
52
- puts "#{node.data}"
53
- preorder(node.left)
54
- preorder(node.right)
55
- end
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
- # print data in postorder for (left, right, root)
58
- def postorder(node)
59
- if node == nil
60
- return
61
- end
62
- postorder(node.left)
63
- postorder(node.right)
64
- puts "#{node.data}"
65
- end
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
- # For test
68
- def test_binary_tree
69
- for i in 1..5 do
70
- BinaryTree.new.insert(@@root, rand(100))
71
- end
72
- puts "inorder : "
73
- inorder(@root)
74
- puts "preorder : "
75
- preorder(@root)
76
- puts "postorder : "
77
- postorder(@root)
78
- end
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.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: []