Rekurzívan Keresés a bináris fában

szavazat
0

tud valaki segíteni, hogy nyomon követni ezt a kódrészletet, ha helyes vagy incorrect.i tanulok rekurzió ezekben a napokban.

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;
}
A kérdést 07/08/2011 13:44
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
3

hiányzik belőle abba állapotban. ellenőrizni kell, ha t.left == null, vagy ha kap NullPointerException. is, akkor vissza kell t.left.isExist(..)VAGY t.right.isExist(...)és nem isExist [akkor eldönthetjük, hogy él ezzel a módszerrel a fia]

Jelenleg ez a verzió fog bejutni végtelen ciklusba -, mert akkor mindig ellenőrizze az azonos gyökér csomópontot.

Válaszolt 07/08/2011 13:47
a forrás felhasználó

szavazat
1

A kód nem szimmetrikus.

az egyik oldalon, akkor hívja isExist(t.left), egy másik hívásisExist(a.right)

Talán szeretnénk hívni t.left.isExist(a), és t.right.isExist(a), de ez tisztán spekulatív, mint te nem kell egy teljes SSCCE számunkra, hogy nézd meg.

Válaszolt 07/08/2011 13:52
a forrás felhasználó

szavazat
0

Ez szintaktikailag helyes Java. De én nem látom, hogy ez esetleg csinál, mit szándékozik.

Úgy tűnik, hogy az „elem” paraméter a dolog, amit keresnek, és az „első” mezőben az aktuális osztály a gyökér a bináris fa.

Még nem világos, a kulcsot a bináris fa és a keresési (az Element osztály) van „eszköz” vagy „adatok”. A „kevesebb, mint” test használja az „eszköz”, míg a „nagyobb, mint” vizsgálati célokra „adatok”. Valószínűnek tűnik, hogy mindkét vonalon kell használnia ugyanazon a területen. Lehet, hogy az egyik a két terület (az „eszköz” vagy „adatok”) kell nem lehet hivatkozni ez a módszer egyáltalán. Talán az utolsó sorban a módszert kell csak „return true;”?

(Gyanítom, hogy a „Stop állapot” és a „kód nem szimmetrikus” válaszok felett egyaránt megfelelő. De lehet, hogy tévedek: Nehéz megmondani, hogy csak a megadott kód.)

Egyetértek azzal, hogy a végtelen hurok valószínű: Gyanítom, hogy létre kell hozni egy második „keresés” funkciót, amely elfogadja a két „Element” paraméterek - az egyik, hogy a dolog keresni (mint a jelenlegi „elem” paraméter) és a többi lény a következő elem keresni - ami megegyezik a jelenlegi helyi változó „c”. Én is így tennék „Extract Method” újratervezés mindent a szervezetben a jelenlegi „keresés” módszert, kivéve az első sorban, és változtassa meg a két rekurzív hívások az új módszer használata.

(Néhány ilyen spekulatív alapján nekem kitalálni, mit szeretne, vagy szándékozik, mivel korlátozott mennyiségű információ. Így tudtam, persze, elég rossz.)

Válaszolt 09/08/2011 03:11
a forrás felhasználó

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