Rekursivt Søk på et binært tre

stemmer
0

kan noen hjelpe meg å spore dette stykke kode hvis korrekt eller incorrect.i jeg studerer rekursjon i disse dager.

boolean search(Element element) {
    Element c=first;
    if(c==null)
        return false;
    else if(element.asset < c.asset)
        if(c.left==null)
            return false;
        else
            return search(c.left);
    else if(element.data>c.data)
        if(c.right==null)
            return false;
        else
            return search(c.right);
     else  
         return element.asset==c.asset;
}
Publisert på 07/08/2011 klokken 12:44
kilden bruker
På andre språk...                            


3 svar

stemmer
3

det mangler stoppe tilstand. du bør sjekke om t.left == null, eller du vil få NullPointerException. også, bør du returnere t.left.isExist(..)OR t.right.isExist(...)og ikke isExist [du vil ønske å påberope denne metoden på sønnen]

i dag, vil denne versjonen komme inn uendelig loop - fordi du vil alltid se i samme rotnoden.

Svarte 07/08/2011 kl. 12:47
kilden bruker

stemmer
1

Koden er ikke symmetrisk.

for en side, ringe deg isExist(t.left), for en annen du ringeisExist(a.right)

Du ønsker sannsynligvis å ringe t.left.isExist(a)og t.right.isExist(a), men det er rent spekulativ som du ikke har en komplett SSCCE for oss å se på.

Svarte 07/08/2011 kl. 12:52
kilden bruker

stemmer
0

Det er syntaktisk riktig Java. Men jeg ser ikke hvordan det kan muligens være å gjøre hva du har tenkt.

Det ser ut til at 'element' parameter er ting du søker etter og "første-feltet i den aktuelle klassen er roten til det binære treet.

Det er uklart om nøkkelen for det binære treet og søk (i Element klasse) er 'aktivum' eller 'data'. Den 'mindre enn' testen bruker 'vinn, mens den 'større enn' test bruker 'data'. Det virker sannsynlig at begge linjene bør bruke samme felt. Det kan være at en av disse to feltene ( 'aktiva' eller 'data') bør ikke refereres i denne metoden i det hele tatt. Kanskje den siste linjen av metoden bør bare 'return true;'?

(Jeg mistenker at "stop tilstand" og "koden ikke er symmetrisk" svarene ovenfor er både feil Men jeg kan ta feil. Det er vanskelig å si med bare koden som er gitt.)

Jeg er enig i at uendelig looping er sannsynlig: Jeg mistenker at du må opprette en ny 'søk' -funksjonen som aksepterer to 'Element' parametere - ene er tingen for å søke etter (som dagens 'element' parameter) og den andre er det neste elementet for å søke - tilsvarende dagens lokale variabelen 'c'. Jeg ville gjøre det "Extract Method" refactoring på alt i kroppen av dagens 'søk' metoden unntatt den første linjen, og deretter endre de to rekursive samtaler til å bruke den nye metoden.

(Noe av dette er spekulativt, basert på meg gjette hva du vil, eller har tenkt, gitt begrenset informasjon. Så jeg kunne selvfølgelig være helt feil.)

Svarte 09/08/2011 kl. 02:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more