A simple binary tree ruby code

Can any body help to explain why the following ruby code causes stack
overflow? I am new to Ruby. Can’t figure out what the problem is.

code:

class Node

attr_reader :data, :left, :right
attr_writer :data, :left, :right

def initialize(data, left = nil, right = nil)
@data, @left, @right = data, left, right
end

def to_s
“#{@data}, #{@left}, #{@right}”
end

def printPreorder
puts self
@left.printPreorder if @left
@right.printPreorder if @right
end

def printPostorder
@left.printPostorder if @left
@right.printPostorder if @right
puts self
end

def printInOrder
@left.printInOrder if @left
puts self
@right.printInOrder if @right
end

end

n = Node.new(0)
n1 = Node.new(1, n)
n.right = n1

n.printInOrder

Ricol Wang wrote in post #1170235:

Can any body help to explain why the following ruby code causes stack
overflow? I am new to Ruby. Can’t figure out what the problem is.

n = Node.new(0)
n1 = Node.new(1, n) # so n1 is the root, with n as left side
n.right = n1 # so n right child is n1 !!!

your tree is a graph…

Yes, you are right! Thank you!

Regis d’Aubarede wrote in post #1170260:

Ricol Wang wrote in post #1170235:

Can any body help to explain why the following ruby code causes stack
overflow? I am new to Ruby. Can’t figure out what the problem is.

n = Node.new(0)
n1 = Node.new(1, n) # so n1 is the root, with n as left side
n.right = n1 # so n right child is n1 !!!

your tree is a graph…

Yes, you are right! Thank you!