2.11_tree_树

这篇博客介绍了树结构的相关术语,如节点、边、根、路径等,并通过一个`FileSystemTree`类展示了如何模拟文件系统的目录操作,如mkdir、ls和cd。示例中创建了'var'、'bin/'和'usr/'目录,并在'bin/'下创建了'python/'目录。
摘要由CSDN通过智能技术生成
--- 树结构相关术语 ---
    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())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值