Hoe kan ik niets teruggeven van een functie die waarde teruggeeft?

Ik heb een binaire zoekboom en ik wil een knooppunt verwijderen.

Ik moet de ouder ophalen, dus heb ik een functie geschreven:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
        if(root == null) 
            return null;
        if(node.element().lessThan(root.element())) {
            if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
                return root;
            else
                getParent(root.getLeft(), node);
        } else {
            if(root.getRight() != null && root.getRight().element().equal(node.element()))
                return root;
            else
                getParent(root.getRight(), node);
        }
    }

In tegenstelling tot C/C++ geeft Java me de volgende foutmelding:

This method must return a result of type BSTreeNode<T>

Het dwingt me om een waarde terug te geven in de laatste regel van de functie.

Hoe kan ik dit oplossen in de context van mijn functie?


Antwoord 1, autoriteit 100%

Uw functie heeft geen rendement voor elke mogelijke omstandigheid. Je hebt:

if (null)...
if (less than root)...
else ( if ...)
       else (no return!)

Wat geef je terug als het niet nul is en anders naar de finale gaat? Er wordt niets geretourneerd.

Je kunt ofwel return getParent...retourneren in het else-statement. of return nullaan het einde van de functie (niet in een if of else-statement)

Ik zie vaak zo’n code om de gebeurtenis van geen van beide if-statements die een waarde teruggeven te dekken.

public int getAnswer()
{
    if (answer.equals("yes"))
        return 0;
    else if (answer.equals("no"))
        return 1;
    return null;
}

Antwoord 2, autoriteit 67%

Je zou hier goed mee moeten zijn:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
    if(root == null) 
        return null;
    if(node.element().lessThan(root.element())) {
        if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
            return root;
        else
            return getParent(root.getLeft(), node);
    } else {
        if(root.getRight() != null && root.getRight().element().equal(node.element()))
            return root;
        else
            return getParent(root.getRight(), node);
    }
}

Antwoord 3

Retour null toevoegen; verklaring aan het einde van de methode.
Ik denk dat deze verklaring in normale gevallen onbereikbaar zal zijn, maar voeg deze toe om de compilatiefout op te lossen en te proberen wat er zal gebeuren.

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
        if(root == null) 
            return null;
        if(node.element().lessThan(root.element())) {
            if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
                return root;
            else
                getParent(root.getLeft(), node);
        } else {
            if(root.getRight() != null && root.getRight().element().equal(node.element()))
                return root;
            else
                getParent(root.getRight(), node);
        }
return null;
    }

Other episodes