Python 数据结构与算法:文件系统树与二叉树的简单实现

文件系统树的构建

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代码示例,介绍了文件系统树和二叉树的简单实现与遍历。文件系统树模拟了目录结构,而二叉树展示了树形结构的不同遍历方式。这两者的结合展示了树的灵活性与广泛应用,对于理解数据结构与算法有着积极的促进作用。希望读者通过这篇文章,对树形结构有更深刻的认识。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值