Vyhledávání rekurzně ze stromu - návratová hodnota – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vyhledávání rekurzně ze stromu - návratová hodnota – Python – Fórum – Programujte.comVyhledávání rekurzně ze stromu - návratová hodnota – Python – Fórum – Programujte.com

 

Stilgar
~ Anonymní uživatel
4 příspěvky
31. 3. 2017   #1
-
0
-

Ahoj,

Pouzivam pro vyhledavani/ porovnavani AVL strom ktery se prochazi rekurzivne.

Pri nalezeni schody vypisuju do konzole informaci o nalezeni. (to mi beha)

Ted se peru s tim ze bych chtel take vracet nejakou hodnotu pripadne menit promenou tridy AVL, kterou bych si pote volal. Pokud to nepude tak budu menit globalni promenou.

Potiz je ze pri kazdem volani si to dela co chce. Kdyz volam funkci pro porovnani nekolikrat zasebou (pokazde s jinou hodnotou pro hledani), tak poprve vraci implicitni hodnotu nastavenou na zacatku v __init__ respektive pri zmene promene a jejim vypisu (v bloku u if hotnota == klic) je hodnota takova jaka je pozadovana. Pote kdyz si volam tento parametr instance.promena (po dobehnuti metody v jine funkci) tak pri prvnim uziti funkce se mi do konzole vypise puvodni hodnota nastavena v __init__, tedy jako by nedoslo ke zmene parametru ikdyz by mel byt uz meneny. Kdyz ji pote volam jeste vicekrat tak uz pri volani instance.promena je hodnota jako pri vkladani a overovani v rekurzi.

Nemel by nekdo nejaky napad jak zajistit v rekurzivnim volani abych si mohl menit parametr, treba jednoduchy True | False nebo navratovaHodnota = "nalezeno" | "nenalezeno".

Dik za help

Nahlásit jako SPAM
IP: 85.160.63.–
Stilgar
~ Anonymní uživatel
4 příspěvky
2. 4. 2017   #2
-
0
-

Pridam kod:

class AVLTree():
    def __init__(self, *args):
        self.node = None 
        self.height = -1  
        self.balance = 0; 
        self.nalezeno = "inicializace"

    # dalsi metody AVL

    def porovnej(self, hodnota):
        #self.nalezeno = "nulovani"
        if self.node != None:
        
            klic = self.node.key
            nazev = self.node.nazev
        
            if klic == hodnota:
                print("Nalezena shoda: " + str(klic) + " = " + str(hodnota))
                self.nalezeno = "nalezeno"
                
                
            if klic > hodnota:
                print("Pruchod")
                self.node.left.porovnej(hodnota)
                
            
            if klic < hodnota:
                print("Pruchod")
                self.node.right.porovnej(hodnota)
Nahlásit jako SPAM
IP: 85.160.56.–
gna
~ Anonymní uživatel
1849 příspěvků
3. 4. 2017   #3
-
0
-

To nalezeno se ti nastavuje jen v tom nodu, kde se najde. Nevidim duvod ten vysledek nekde v tom strome drzet -- nech to "probublat nahoru".

''' mas to cele spatne :-) '''
def porovnej(self, hodnota):
    if self.node != None:
        klic = self.node.key
        nazev = self.node.nazev
    
        if klic == hodnota:
            print("Nalezena shoda: " + str(klic) + " = " + str(hodnota))
            return True # <---
            
        if klic > hodnota:
            print("Pruchod")
            return self.node.left.porovnej(hodnota) # <---
            
        if klic < hodnota:
            print("Pruchod")
            return self.node.right.porovnej(hodnota) # <---

    return False # <---

...
vysledek = inst.porovnej(...)
Nahlásit jako SPAM
IP: 213.211.51.–
Stilgar
~ Anonymní uživatel
4 příspěvky
3. 4. 2017   #4
-
0
-

Diky, parada. Funguje to.   

Uz se nemusim srcasit s globalnimi promenymi nebo promenymi v instanci, viz vedlejsi vlakno.

Nahlásit jako SPAM
IP: 85.160.56.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Návratová hodnota — založil Luckaa

Návratová hodnota — založil RePRO

Delegát - návratová hodnota — založil Kubas129

Návratová hodnota z vlákna — založil Filip0913

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý