class IskalnoDrevo():

    def __init__(self, elementi=[]):
        self.prazno = True
        for (k,v) in elementi: self.vstavi(k,v)

    def __repr__(self):
        if self.prazno:
            return "IskalnoDrevo()"
        else:
            return "IskalnoDrevo(elementi={0}".format(list(iter(self)))
    
    def vstavi(self, k, v):
        if self.prazno:
            self.prazno = False
            self.kljuc = k
            self.vrednost = v
            self.levo = IskalnoDrevo()
            self.desno = IskalnoDrevo()
        else:
            if k < self.vrednost:
                self.levo.vstavi(k, v)
            elif self.vrednost < k:
                self.desno.vstavi(k, v)
            else:
                self.vrednost = v
        return self

    def najdi(self, k):
        if self.prazno:
            return None
        else:
            if k < self.kljuc:
                return self.levo.najdi(k)
            elif self.kljuc < k:
                return self.desno.najdi(k)
            else:
                return self.vrednost

    def _odstrani_max(self):
        """Odstrani največji element in ga vrni"""
        # domača naloga
        pass

    def _odstrani_min(self):
        """Odstrani najmanjši element in ga vrni"""
        # domača naloga
        pass

    def brisi(self, k):
        if not self.prazno:
            if k < self.kljuc:
                self.levo.brisi(k)
            elif self.kljuc < k:
                self.desno.brisi(k)
            else:
                if not self.levo.prazno:
                    # potegnemo gor največjega v self.levo
                    (l,w) = self.levo._odstrani_max()
                    self.kljuc = l
                    self.vrednost = w
                elif not self.desno.prazno:
                    # potegnemo gor najmanjšega v self.desno
                    (l,w) = self.desno._odstrani_min()
                    self.kljuc = l
                    self.vrednost = w
                else:
                    # smo v listu
                    self.prazno = True
                    del self.kljuc
                    del self.vrednost
                    del self.levo
                    del self.desno



