设为首页 加入收藏

TOP

用Python实现数据结构之二叉搜索树(二)
2019-02-10 22:08:30 】 浏览:241
Tags:Python 实现 数据结构之二 搜索
f.left(walk)
    return walk


def _subtree_last_position(self, p):
    """返回树的最右节点"""
    walk = p
    while self.right(walk) is not None:
        walk = self.right(walk)
    return walk


下面是一些公开的访问方法:


def first(self):
    return self._subtree_first_position(
        self.root()) if len(self) > 0 else None


def last(self):
    return self._subtree_last_position(
        self.root()) if len(self) > 0 else None


def before(self, p):
    """前驱位置"""
    if self.left(p):
        return self._subtree_last_position(self.left(p))
    else:
        walk = p
        above = self.parent(walk)
        while above is not None and walk == self.left(above):
            walk = above
            above = self.parent(walk)
        return above


def after(self, p):
    """后继位置"""
    if self.right(p):
        return self._subtree_first_position(self.right(p))
    else:
        walk = p
        above = self.parent(walk)
        while above is not None and walk == self.right(above):
            walk = above
            above = self.parent(walk)
        return above


def find_position(self,k):
    if self.is_empty():
        return None
    else:
        p = self._subtree_search(self.root(),k)
        return p


接下来是映射的核心方法:


def __getitem__(self, k):
    if self.is_empty():
        raise KeyError('Key Error'+repr(k))
    else:
        p = self._subtree_search(self.root(),k)
        if k!=p.key():
            raise KeyError('Key Error' + repr(k))
        return p.value()


def __setitem__(self, k,v):
    if self.is_empty():
        leaf = self.add_root(self._Item(k,v))
    else:
        p = self._subtree_search(self.root(),k)
        if p.key() == k:
            p.element().value = v
            return
        else:
            item = self._Item(k,v)
            if p.key() < k:
                leaf = self.add_right(p,item)
            else:
                leaf = self.add_left(p, item)


def __iter__(self):
    p = self.first()
    while p is not None:
        yield p.key()
        p = self.after(p)


def mapdelete(self,p):
    if self.left(p) and self.right(p):      #两个孩子都有的时候
        replacement = self._subtree_last_position(self.left(p)) #用左子树最右位置代替
        se

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Boot 2注解使用Mybatis动.. 下一篇用Python实现数据结构之映射

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目