--- 树结构相关术语 ---
1. 节点 (Node):组成树的基本部分
2. 边 (Edge):组成树的另一个基本部分,连接节点
叶节点没有出边,根节点没有入边
3. 根 (Root):唯一一个没有入边的节点
4. 路径 (Path):由边依次连接在一起的节点的有序列表
5. 子节点 (Children):入边来自同一个节点的若干节点,称为这个节点的子节点
6. 父节点 (Parent):一个节点是其所有出边所连接节点的父节点
7. 兄弟节点 (Sibling):具有同一个父节点的节点
8. 子树 (Subtree):一个节点和其所有子孙节点,以及相关边的集合
9. 叶节点 (Leaf):没有子节点的节点
10. 层级 (Level):从根节点开始到达一个节点的路径,所包含的边的数量
11. 高度 (Height):树中所有节点的最大层级
class Node(object):
def __init__(self, name, type='dir'):
self.name = name
self.type = type
self.children = []
self.parent = Node
# 链式存储
def __repr__(self):
return self.name
n = Node('hello')
n2 = Node('world')
n.children.append(n2)
n2.parent = n
树的应用:
class FileSystemTree(object):
"""文件系统"""
def __init__(self):
self.root = Node('/')
self.now = self.root
def mkdir(self, name):
# name 以 / 结尾
if name[-1] != '/':
name += '/'
node = Node(name)
self.now.children.append(node)
node.parent = self.now
def ls(self):
return self.now.children
def cd(self, name):
# '/var/python'
if name[-1] != '/':
name += '/'
if name == '../':
self.now = self.now.parent
return
for child in self.now.children:
if child.name == name:
self.now = child
return
raise ValueError('Invalid dir!')
tree = FileSystemTree()
tree.mkdir('var')
tree.mkdir('bin/')
tree.mkdir('usr/')
tree.cd('bin/')
tree.mkdir('python/')
tree.cd('../')
print(tree.ls())