Reputation: 7065
I want to replace the below (non DRY) code:
dir = value > node.data ? "right" : "left"
if value > node.data
if node.right.nil?
node.right = Node.new(value)
else
insert(value, node.right)
end
else
if node.left.nil?
node.left = Node.new(value)
else
insert(value, node.left)
end
end
with something like this:
dir = value > node.data ? "right" : "left"
if node.dir.nil?
node.dir = Node.new(value)
else
insert(value, node.dir)
end
Node
is a struct
defined like so:
Node = Struct.new(:data, :left, :right)
How can I do this?
Upvotes: 0
Views: 35
Reputation: 3801
Since it's a struct, you can use [:left]
or [:right]
instead of .left
and .right
.
Therefore, you can
dir = value > node.data ? :right : :left
if node[dir].nil?
node[dir] = Node.new(value)
else
insert(value, node[dir])
end
Upvotes: 1