2013-09-05 2 views
2

Я пытаюсь создать программу для создания двоичного дерева с использованием рекурсивных методов, но у меня возникла проблема.Двоичное дерево в Eiffel

В моем классе MYNODE, я включаю нас влево и вправо, однако они могут быть пустыми (Void). Вот код, может кто-нибудь мне помочь?

class 
    MYNODE 
create 
    make 
feature 
    name: STRING 
    left: MYNODE 
    right: MYNODE 
    setname(n:STRING) do 
     name:= n 
    end 
    setleft(i:MYNODE) do 
     left:=i 
    end 
    setright(i:MYNODE) do 
     right:=i 
    end 
    make do 
     create nameme.make (80) 
    end 
end 

И мой главный класс:

class 
    MAIN 
create 
    make 
feature 
    root : MYNODE 
    node: MYNODE 
    build_tree() do 
     io.put_string ("Name: ") 
     io.read_line 
     node.setname(io.last_string) 
     insert(node) 
    end 
    insert(no,al:MYNODE) do 
     if no.name<al.name then 
      if no.left = Void then 
       no.setleft(al) 
      else 
       insert(no.left,al) 
      end 
     else 
      if no.right = Void then 
       no.setright(al) 
      else 
       insert(no.right,al) 
      end 
     end 
    end 
    make do 
     create root.make() 
     create node.make() 
     build_tree() 
    end 
end 

ответ

2

Я предполагаю, что у вас возникли проблемы компиляции этого кода, так как атрибуты прикрепляются и, следовательно, должны быть инициализированы перед использованием. Для того чтобы Void, вы должны объявить атрибуты left и right съемными, то есть:

left, right: detachable MYNODE 
Смежные вопросы