2013-03-07 2 views
1

Я написал метод вставки для дерева двоичного поиска, который равен void. Мне нужно изменить этот метод, чтобы он возвращал boolean, но я смущен, потому что мой вспомогательный метод для вставки возвращает Node.Двоичный метод поиска дерева вставки метод возврата типа

Есть ли способ написать какой-либо другой вспомогательный метод, который вернет boolean? Если нет, то как я могу изменить метод, чтобы вернуть boolean?

Это мой метод:

public void insert(E s) 
{ 
    root = insert(s, root); 
    root.setParent(findParent(root.getData())); 
} 

private Node<E> insert(E s, Node<E> T) 
{ 
    //easiest case, empty tree, create new tree 
    if(T == null) 
    { 
     T = new Node<E>(s); 
    } 
    //s is greater than T, insert on right subtree 
    else if(s.compareTo(T.getData()) > 0) 
    { 
     T.setRight(insert(s, T.getRight())); 
    } 
    //s is less than T, insert on left subtree 
    else if (s.compareTo(T.getData()) < 0) 
    { 
     T.setLeft(insert(s,T.getLeft())); 
    } 
    else 
    { 
     System.out.println("Item already present."); 

    } 
    return T; 
}//Close insert 
+0

исключения использования ... Или вернуть нуль в вашей второй метод в результате неудачной вставки. – Tutankhamen

ответ

1

Я предполагаю, что вы должны вернуться true, если вставка прошла успешно и false иначе? Измените свою первую insert функцию, чтобы выглядеть следующим образом:

public boolean insert(E s) 
{ 
    try { 
     root = insert(s, root); 
     root.setParent(findParent(root.getData())); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

И изменить вспомогательную функцию, так что, если элемент уже присутствует, он бросает исключение (для основной функции вставки, чтобы поймать и вызвать false возврат).

private Node<E> insert(E s, Node<E> T) throws Exception { 
    ... 
    else { 
     System.out.println("Item already present."); 
     throw new Exception("Item already present."); 
    } 
    return T; 
} 

Или (как предполагает Тутанхамон) возвращают null из вспомогательного метода в случае неудачного введения, поэтому у вас есть:

public boolean insert(E s) 
{ 
    root = insert(s, root); 
    if (root == null) { 
     return false; 
    } 
    root.setParent(findParent(root.getData())); 
    return true; 
} 

private Node<E> insert(E s, Node<E> T) { 
    ... 
    else { 
     System.out.println("Item already present."); 
     return null; 
    } 
    return T; 
} 
+1

Я думаю, что проще вернуть null :) – Tutankhamen

Смежные вопросы