2分木へのデータの追加について
「アルゴリズムとデータ構造」紀平拓男/春日伸弥 著 (http://www.sbcr.jp/products/4797324198.html?sku=4797324198)第6章において 、2分木へのデータの追加のコードが紹介されています。
それを今Ruby版に置き換えたつもりなのですが、二つ目のデータの追加のときに上手く動かなくて困っています。
どこを修正すればよいか教えていただけないでしょうか?
# -*- coding: cp932 -*-
# Node Class
class Node
attr_reader :value, :left, :right
def initialize(val)
@value = val # ノードが保持する値
@left = nil # 左側のノード
@right = nil # 右側のノード
end
end
# ノードを生成する
def create_new_node(val)
newNode = Node.new(val)
return newNode
end
# ノードの追加
def insert_tree(num, node = nil)
# 1つも挿入されていない場合
if node == nil
@tree_root = create_new_node(num)
return
end
# num が現在の node の値よりも小さい場合
if node.value > num
if node.left != nil
insert_tree(num, node.left)
else
node.left = create_new_node(num)
end
# num が現在の node の値以上の場合
else
if node.right != nil
insert_tree(num, node.right)
else
node.right = create_new_node(num)
end
end
end
def print_tree(depth, node = nil)
if node == nil
return
end
print_tree(depth + 1, node.left)
i = 0
while i < depth
printf " "
i += 1
end
printf("%d\n",node.value)
print_tree(depth + 1, node.right)
end
def main
action = nil
while action != 0
print_tree(0, @tree_root)
printf("実行する操作のタイプを入力してください。\n 1 :追加\t2 :検索\t3 :削除\t それ以外:終了>")
action = gets.chomp.to_i
case action
when 1
printf("1 ~100の範囲で,追加する数字を入力してください:")
i = gets.chomp.to_i
if (i < 1 || i > 100)
continue
end
insert_tree(i, @tree_root)
else
break
end
end
end
main