文件系统树的构建
Node 类
首先,我们定义了一个 Node
类,该类表示文件系统树的节点。每个节点包含名称(name
)、类型(type
,默认为目录)、子节点列表(children
)以及父节点(parent
)。通过 __repr__
方法,我们可以方便地输出节点的名称。
class Node:
def __init__(self, name, type='dir'):
self.name = name
self.type = type
self.children = []
self.parent = None
def __repr__(self):
return self.name
FileSystemTree 类
然后,我们创建了 FileSystemTree
类,该类用于构建文件系统树。它包含一个根节点 root
和一个指示当前节点的属性 now
。通过 mkdir
方法可以创建目录,ls
方法返回当前节点的子节点列表,cd
方法用于切换当前节点。
class FileSystemTree:
def __init__(self):
self.root = Node("/")
self.now = self.root
def mkdir(self, 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):
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())
二叉树的构建与遍历
BitreeNode 类
接下来,我们定义了一个二叉树节点的类 BitreeNode
,其中包含数据(data
)、左子节点(lchild
)和右子节点(rchild
)。
class BitreeNode:
def __init__(self, data):
self.data = data
self.lchild = None
self.rchild = None
二叉树的构建与遍历
我们创建了一个简单的二叉树,并实现了前序遍历、中序遍历、后序遍历和层序遍历。
a = BitreeNode("A")
b = BitreeNode("B")
c = BitreeNode("C")
d = BitreeNode("D")
e = BitreeNode("E")
f = BitreeNode("F")
g = BitreeNode("G")
e.lchild = a
e.rchild = g
a.rchild = c
c.lchild = b
c.rchild = d
g.rchild = f
root = e
# 前序遍历
def pre_order(root):
if root:
print(root.data, end=" ")
pre_order(root.lchild)
pre_order(root.rchild)
pre_order(root)
print()
# 中序遍历
def in_order(root):
if root:
in_order(root.lchild)
print(root.data, end=" ")
in_order(root.rchild)
in_order(root)
print()
# 后序遍历
def post_order(root):
if root:
post_order(root.lchild)
post_order(root.rchild)
print(root.data, end=" ")
post_order(root)
print()
# 层序遍历
from collections import deque
def level_order(root):
queue = deque()
queue.append(root)
while len(queue) > 0:
node = queue.popleft()
print(node.data, end=" ")
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)
level_order(root)
结合应用示例
通过以上代码,我们演示了文件系统树和二叉树的简单实现与遍历。这些基础数据结构在计算机科学中有着广泛的应用,对于理解树形结构和遍历算法非常重要。希望读者通过这个示例,更好地理解和运用这些概念,为进一步学习深入的数据结构与算法打下基础。
总结
本文通过Python代码示例,介绍了文件系统树和二叉树的简单实现与遍历。文件系统树模拟了目录结构,而二叉树展示了树形结构的不同遍历方式。这两者的结合展示了树的灵活性与广泛应用,对于理解数据结构与算法有着积极的促进作用。希望读者通过这篇文章,对树形结构有更深刻的认识。