Files
cs-252/lab19/tree.rb
2026-04-30 19:30:13 -07:00

57 lines
1.3 KiB
Ruby

class Tree
attr_accessor :value, :left, :right
def initialize(value, left=nil, right=nil)
@value = value
@left = left
@right = right
end
def each_node(&block)
block.call(@value)
@left.each_node(&block) if @left
@right.each_node(&block) if @right
end
def method_missing(method_name, *args)
method_name = method_name.to_s
path = method_name.scan(/(left|right)/).flatten
current_node = self
path.each do |direction|
if direction == "left"
current_node = current_node.left
elsif direction == "right"
current_node = current_node.right
end
return nil if current_node.nil?
end
return current_node.value
super
end
end
my_tree = Tree.new(42,
Tree.new(3,
Tree.new(1,
Tree.new(7,
Tree.new(22),
Tree.new(123)),
Tree.new(32))),
Tree.new(99,
Tree.new(81)))
my_tree.each_node do |v|
puts v
end
arr = []
my_tree.each_node do |v|
arr.push v
end
p arr
p "Getting nodes from tree"
p my_tree.left_left
p my_tree.right_left
p my_tree.left_left_right
p my_tree.left_left_left_right