Бинарное дерево в Eiffel

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

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

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

person Antônio Marco da Silva    schedule 05.09.2013    source источник


Ответы (1)


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

left, right: detachable MYNODE
person Emmanuel Stapf    schedule 05.09.2013
comment
Похоже на неочевидное значение по умолчанию (будучи attached). - person U. Windl; 24.05.2021