From e5784bb20b5acd4faf2c109794cf45a411bebfb5 Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Thu, 30 Apr 2026 19:30:13 -0700 Subject: [PATCH] lab19: impl --- lab19/tree.rb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lab19/tree.rb b/lab19/tree.rb index 36566b0..0cbcf3d 100644 --- a/lab19/tree.rb +++ b/lab19/tree.rb @@ -5,6 +5,28 @@ class Tree @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, @@ -32,4 +54,3 @@ p my_tree.left_left p my_tree.right_left p my_tree.left_left_right p my_tree.left_left_left_right -