diff options
Diffstat (limited to 'src/final/traversal.rb')
| -rw-r--r-- | src/final/traversal.rb | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/final/traversal.rb b/src/final/traversal.rb new file mode 100644 index 0000000..02833a5 --- /dev/null +++ b/src/final/traversal.rb @@ -0,0 +1,71 @@ +Node = Struct.new(:value, :left, :right, keyword_init: true) do + def to_s + "(#{value},#{left},#{right})" + end +end + +tree = Node.new( + value: 'A', + left: Node.new(value: 'B'), + right: Node.new( + value: 'C', + left: Node.new(value: 'D'), + right: Node.new(value: 'E') + ) +) + +def pre_order(node) + return if node.nil? + + print("#{node.value}") + pre_order(node.left) + pre_order(node.right) +end + +def in_order(node) + return if node.nil? + + in_order(node.left) + print("#{node.value}") + in_order(node.right) +end + +def post_order(node) + return if node.nil? + + post_order(node.left) + post_order(node.right) + print("#{node.value}") +end + +def level_order(node) + q = [] + q.unshift(node) + + until q.empty? + node = q.shift + next unless node + + print("#{node.value}") + q.unshift(node.left) + q.unshift(node.right) + end +end + +puts "Tree: #{tree}" + +print "DFS" +print "\n\tpre-order: " +pre_order(tree) + +print "\n\tin-order: " +in_order(tree) + +print "\n\tpost-order: " +post_order(tree) +puts + +print "BFS" +print "\n\tlevel-order: " +level_order(tree) +puts |
