#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