Számolja a mélység egy bináris keresési fa?

szavazat
0

Én nehezen kiszámításakor az összegzése mélyén [az összege az egyes mélységekben minden gyermek számára a gyökér] egy adott BST. Megvan a teljes csomópontok száma a fát, és igyekszem számítsuk ki az átlagos mélysége a fa, amely megköveteli azt, hogy ebben a mélységben összeget.

A rekurzió és én nem nagyon jól kijövünk .. én találni erre a problémára nagyon nehéz. Szeretnék látni egy rekurzív megoldás azonban, ha lehetséges.

JEGYZET:

Létrehoztam accessors Node.getLeft () és Node.getRight ()

A kérdést 09/12/2009 21:03
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
2

Gondolja át, hogyan menne erről kanonikusan kézzel ha már bemutatott egy képet egy BST neked egy papírlapra. Ha egy csomópont, milyen információra van szüksége, hogy nyomon követni? Hogyan lehet megtalálni a magassága egy adott csomópont?

Innen próbáld ezt lefordítani pszeudokódokra vagy akár egyenesen a Java. Ha gondjai vannak, bátran comment, így a felhasználók segíteni.

Válaszolt 09/12/2009 21:08
a forrás felhasználó

szavazat
4

Csak azt kell, hogy tartsa a mélysége számláló ahogy áthalad a fa (felnéz fa bejárási, ha kell), és adjuk hozzá a számláló értékét minden alkalommal, amikor eléri a csomópontot. Akkor csak osztani a csomópontok száma.

Ez úgy néz ki, mint a házi feladatot úgyhogy nem nyújt részletesebb megoldás.

Válaszolt 09/12/2009 21:09
a forrás felhasználó

szavazat
0

Ez házi feladat? Ha így jelöli meg a kérdést, mint olyat.

Lehet egy olyan eljárás, amely:

  • van egy csomópont referencia és a mélysége mint érvek
  • növekmény mélység
  • ha csomópont nem gyermek csomópont hívás rekurzívan jobbra és balra frissítés összege ennek megfelelően
  • különben visszatér összeg + mélység

Miután ezt devide a gyermekek száma a fán, hogy az átlagos mélysége.

Válaszolt 09/12/2009 21:10
a forrás felhasználó

szavazat
0

Meg kell, hogy látogassa meg az ágakat és kitalálni, milyen mélyen vannak. Ez azt sugallja,:

Adjon node-látogató funkció extra érv. Meg kell tudni, hogy nem csak, merre tart, hanem hogy milyen mélyen van. Minden alkalommal, úgy hívják, úgy hívják fel, hogy mélyebben, így a csomópont látogató csak azt, hogy megnöveljük a mélység számot kapta a hívót.

Most az egyik 2 dolog történhet:

  • Vagy a node talált levélcsomópont, azaz nincs gyerek; ebben az esetben a látogató kell, hogy visszatérjen a mélysége a hívónak. Igen, csak a számát adja vissza is kapta a hívó, + 1.

  • vagy ez nem egy levél csomópont. Ebben az esetben, akkor azt 1 vagy 2 gyermek számára. Meg kell, hogy azok részletes jelentések a mi gyerekek vissza a hívónak, így csak vissza az összeget a mélyben vissza a gyerekek.

A mágikus rekurzió, a szám visszatért a root látogató lesz az összege a mélyben minden gyermek számára.

Ahhoz, hogy egy átlagos mélysége, akkor szeretnénk osztani ezt száma levél csomópontok; ami azt hagyja a második bejárás számítani. Meg lehetne tenni egy, de jó lenne egy kicsit bonyolultabb.

Válaszolt 09/12/2009 21:26
a forrás felhasználó

szavazat
0

Mivel ez a házi feladatot, nem akarom, hogy csak ad választ. Ehelyett itt egy rekurzív módon, hogy kiszámítja a hossza egy egyszeresen láncolt lista. Remélhetőleg ez bizonyítani rekurzív módon meg tudja érteni, és akkor extrapolálni onnan, hogy megoldja a problémát BST.

public final class LL {
    public final int value;
    public LL next;

    public LL(final int value) {
        this.value = value;
    }

    public void add(final int value) {
        if (null == next) {
            next = new LL(value);
        } else {
            next.add(value);
        }
    }

    /**
     * Calculate the length of the linked list with this node as its head (includes this node in the count).
     *
     * @return the length.
     */
    public int length() {
        if (null == next) {
            return 1;
        }
        return 1 + next.length();
    }

    public static void main(final String... args) {
        final LL head = new LL(1);
        head.add(2);
        head.add(3);
        System.out.println(head.length());
        System.out.println(head.next.length());
    }
}
Válaszolt 09/12/2009 21:57
a forrás felhasználó

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