２分木へのデータの追加について


「アルゴリズムとデータ構造」紀平拓男／春日伸弥 著
（<http://www.sbcr.jp/products/4797324198.html?sku=4797324198>）第6章において
、２分木へのデータの追加のコードが紹介されています。  
それを今Ruby版に置き換えたつもりなのですが、 **二つ目のデータの追加のとき** に上手く動かなくて困っています。  
どこを修正すればよいか教えていただけないでしょうか？

[code]

    # -*- 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
    
[/code]




`attr_reader` を `attr_accessor` に変更すれば動くのではないでしょうか．  
`attr_reader` はgetterを自動生成するだけなので， `insert_tree(num, node = nil)` 内の

[code]

    node.left = create_new_node(num)
    node.right = create_new_node(num)
    
[/code]

のところでエラーになってしまうと思います．

ちなみに，

  * `attr_accessor` setter, getterを両方定義
  * `attr_reader` getterのみ定義
  * `attr_writer` setterのみ定義

となっています．




`attr_reader` を `attr_accessor` に変更すれば動くのではないでしょうか．  
`attr_reader` はgetterを自動生成するだけなので， `insert_tree(num, node = nil)` 内の

[code]

    node.left = create_new_node(num)
    node.right = create_new_node(num)
    
[/code]

のところでエラーになってしまうと思います．

ちなみに，

  * `attr_accessor` setter, getterを両方定義
  * `attr_reader` getterのみ定義
  * `attr_writer` setterのみ定義

となっています．

