python--获取节点

不问归期 提交于 2019-12-05 19:11:36
#usr/bin/python
#-*-coding:utf-8-*-
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 getParent(self,child):
        return self.childToParent.get(child,"没有父亲的节点")
    def getChildren(self,parent):
        return self.parentToChildren.get(parent,"没下级")
#获取所有祖先节点
    def getZuXian(self,zisun):
        parent=self.getParent(zisun)
        if parent is None:
            return []
        zupu=self.getZuXian(parent)
        zupu.append(parent)
        return zupu
#获取所有子孙节点
    def zisun(self,zs,zu):
        children=self.getChildren(zu)
        if children == "没下级":
            return
        for c in children:
            self.zisun(zs,c)
        zs.extend(children)
#获取所有兄弟节点
    def getSiBling(self,s):
        parent=self.getParent(s)
        children=self.getChildren(parent)
        children.remove(sibling)
        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="网3"
    parent=tree.getParent(child)
    print('{1}的上级是:{0}'.format(parent,child))
#根据当前节点获取所有子节点
    parent="计算机学院"
    children=tree.getChildren(parent)
    print("{0}的子集是:{1}".format(parent,children))
#根据当前节点获取所有祖先节点 网3
    zisun="网3"
    zuxuan=tree.getZuXian(zisun)
    print('{0}的祖先是:{1}'.format(zisun,zuxuan))
#根据当前节点获取所有子孙节点 学校
    zu='学校'
    zs=[]
    tree.zisun(zs,zu)
    print('{0}的子孙是:{1}'.format(zu,zs))
#根据当前节点获取所有兄弟节点
    sibling='法学院'
    rs=tree.getSiBling(sibling)
    print('{1}的兄弟是:{0}'.format(rs,sibling))

运行结果:

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


Process finished with exit code 0

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!