master
 1Node = Struct.new(:value, :left, :right, keyword_init: true) do
 2  def to_s
 3    "(#{value},#{left},#{right})"
 4  end
 5end
 6
 7tree = Node.new(
 8  value: 'A',
 9  left: Node.new(value: 'B'),
10  right: Node.new(
11    value: 'C',
12    left: Node.new(value: 'D'),
13    right: Node.new(value: 'E')
14  )
15)
16
17def pre_order(node)
18  return if node.nil?
19
20  print("#{node.value}")
21  pre_order(node.left)
22  pre_order(node.right)
23end
24
25def in_order(node)
26  return if node.nil?
27
28  in_order(node.left)
29  print("#{node.value}")
30  in_order(node.right)
31end
32
33def post_order(node)
34  return if node.nil?
35
36  post_order(node.left)
37  post_order(node.right)
38  print("#{node.value}")
39end
40
41def level_order(node)
42  q = []
43  q.unshift(node)
44
45  until q.empty?
46    node = q.shift
47    next unless node
48
49    print("#{node.value}")
50    q.unshift(node.left)
51    q.unshift(node.right)
52  end
53end
54
55puts "Tree: #{tree}"
56
57print "DFS"
58print "\n\tpre-order:   "
59pre_order(tree)
60
61print "\n\tin-order:    "
62in_order(tree)
63
64print "\n\tpost-order:  "
65post_order(tree)
66puts
67
68print "BFS"
69print "\n\tlevel-order: "
70level_order(tree)
71puts