树: 抓取数据

获取节点,通用的 : 

'''
                       学校
    商学院   法学院     电子学院          计算机学院
                                   软件     网络    数据
                                        网1  网2  网3

1.根据当前节点获取父节点
2.根据当前节点获取所有子节点
3.根据当前节点获取所有祖先节点
4.根据当前节点获取所有子孙节点
5.根据当前节点获取所有兄弟节点
'''

class Tree:
    childToParent = None
    parentToChildren = None
    def add(self,parent,child):
        if self.childToParent is None:
            self.childToParent = {child:parent}
        else:
            self.childToParent[child] = parent
        #+===================================================
        if self.parentToChildren is None:
            self.parentToChildren = {parent:[]}
        children = self.parentToChildren.get(parent,[])
        if len(children) == 0:
            self.parentToChildren[parent] = children
        children.append(child)
    def getPartent(self,child):
        return  self.childToParent.get(child,'没有父亲节点')
    def getChildren(self,parent):
        return  self.parentToChildren.get(parent,'没有下级')
    #+=================================================++======
    def getZuXian(self,zisun):
        '''
        思想就是递归问爹
        1.可以获取上一级 getParent
        2.如果我能够让上一级返回的数据在执行 getParent  执行直到没有上级终止
        :param zisun:
        :return:
        '''
        parent = self.getPartent(zisun)
        if parent is None:
            return []
        zupu = self.getZuXian(parent)
        zupu.append(parent)
        return  zupu
#======================+++++++++++++++++++++++++++++++++++==============================
    def zisun(self,zs,zu):
        '''
        1.得到当前节点的孩子
        2.便利当前节点的孩子,每一个孩子去得到他们的孩子
        :param zs:  结果
        :param zu:  条件
        :return:
        '''
        children = self.getChildren(zu)
        if children == "没有下级":
            return
        for c in children:
            self.zisun(zs,c)
        zs.extend(children)
    #==========================================
    def getSibling(self,s):
        parent = self.getPartent(s)
        children = self.getChildren(parent)
        children.remove(s)
        return children



if __name__=='__main__':
    tree = Tree()
    tree.add(None,'学校')
    tree.add('学校','商学院')
    tree.add('学校','法学院')
    tree.add('学校','电子学院')
    tree.add('学校','计算机学院')
    tree.add('计算机学院','软件')
    tree.add('计算机学院','网络')
    tree.add('计算机学院','数据')
    tree.add('网络','网1')
    tree.add('网络','网2')
    tree.add('网络','网3')
    #根据当前节点获取父节点
    child = '网络'
    parent = tree.getPartent(child)
    print("{0}的上级是:{1}".format(child,parent))
    #根据当前节点获取所有子节点
    parent = '计算机学院'
    children = tree.getChildren(parent)
    print("{0}的子级是:{1}".format(parent,children))
    #根据当前节点获取所有祖先节点
    zisun = '网3'
    zuxian = tree.getZuXian(zisun)
    print("{0}的祖先是:{1}".format(zisun,zuxian))
    #根据当前节点获取所有子孙节点
    zu = "学校"
    zs = []
    tree.zisun(zs,zu)
    print("{0}的子孙是:{1}".format(zu,zs))
    #.根据当前节点获取所有兄弟节点
    sibling = "法学院"
    rs = tree.getSibling(sibling)
    print("{0}的兄弟是:{1}".format(sibling,rs))

输出为:  

网络的上级是:计算机学院
计算机学院的子级是:['软件', '网络', '数据']
网3的祖先是:['学校', '计算机学院', '网络']
学校的子孙是:['网1', '网2', '网3', '软件', '网络', '数据', '商学院', '法学院', '电子学院', '计算机学院']
法学院的兄弟是:['商学院', '电子学院', '计算机学院']







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值