树
1. 树的概念
树是一种非线性的数据结构,由n(n>=0)个有限节点组成,n=0是称为空数。
树的特点:
1. 数有一个根节点,根节点没有前驱节点
2. 除根节点外的其他节点有可以组成互不相交的集合,每个集合有是一棵树
3. 子树根节点只有一个前驱节点,可以有0个或多个后驱节点
4. 树是一种可以递归定义的数据结构
一颗普通的树:

树的相关概念:
1. 节点的度:一个节点含有的子树的个数:如A节点的度为6,B节点的度为0,D节点的度为1
2. 根节点和叶子节点:度为零的节点:如根节点为A,叶子节点为B、C、H、I、P、Q、K、L、M、N
3. 父节点和子节点:父节点即前驱节点,子节点即后驱节点:如J的父节点是E,J的子节点是P和Q
4. 兄弟节点:拥有相同父节点的节点:如P和Q是兄弟节点
5. 树的度:一棵树中最大节点的度称为树的度:如上图的树的度为6
6. 树的深度或高度:一棵树的最大层次:如上图的数的深度为4
2. 树的实现:模拟linux文件系统
# 构建节点类 class Node: def __init__(self, name): self.name = name self.children = [] # 子文件或目录 self.parent = None # 父目录 # 字符串显示转换 def __repr__(self): return self.name # 文件系统类 class FileSystemTree: def __init__(self): self.root = Node('/') # 初始 / 为根目录 self.now = self.root # 定义当前所在位置 # 创建目录 def mkdir(self, name): # 给目录加上/结尾作为标志 if name[-1] != '/': name += '/' # 判断创建的目录是否存在 for i in self.now.children: if i.name == name: print("目录已存在,无法创建!") return node = Node(name) # 生成节点 self.now.children.append(node) # 将当前位置的子目录插入节点 node.parent = self.now # 设置节点的父级目录 # 创建文件 def touch(self, name): # 遍历文件,判断文件是否存在 for child in self.now.children: if child.name == name: name += "-副本" # 和创建目录一致 node = Node(name) self.now.children.append(node) node.parent = self.now # 显示当前目录下的所有文件 def ls(self): return self.now.children # 返回当前位置的子文件 # 切换目录 def cd(self, name): # 给文件不起标志符 if name[-1] != '/': name += '/' # 返回上一层目录 if name == "../": self.now = self.now.parent return # 返回根目录 if name == "/": self.now = self.root return # 遍历当前目录的子文件 for child in self.now.children: if child.name == name: self.now = child return raise ValueError("not this dir!") # 删除文件和目录 def rm(self, name): # 判断是否存在当前删除的文件或目录 for child in self.now.children: if child.name == name: # 移除需要删除的文件的下标 self.now.children.pop(self.now.children.index(child)) return raise ValueError("不存在此文件或目录") tree = FileSystemTree()
浙公网安备 33010602011771号