一、树结构基础认知

1.1 树的四大特征

  • 层级关系:父子节点的从属关系
  • 唯一根节点:访问起点
  • 无循环:从根到叶的路径不形成环
  • N叉分支:每个节点可有多个子节点
  • 1.2 核心组件解析

    class TreeNode:
        def __init__(self, data):
            self.data = data    # 节点存储的数据
            self.children = []  # 子节点容器(多叉树特性)
    
        def add_child(self, node):
            self.children.append(node)

    二、树结构的Python实现

    2.1 构建多叉树实例

    我们构建如下结构的树:

            Computer
           /   |    \
       HDD  Memory  CPU
             / \
           RAM  Cache

    代码实现

    # 创建根节点
    root = TreeNode("Computer")
    
    # 添加一级子节点
    hdd = TreeNode("HDD")
    memory = TreeNode("Memory")
    cpu = TreeNode("CPU")
    root.add_child(hdd)
    root.add_child(memory)
    root.add_child(cpu)
    
    # 添加二级子节点
    ram = TreeNode("RAM")
    cache = TreeNode("Cache")
    memory.add_child(ram)
    memory.add_child(cache)

    2.2 遍历算法实现

    深度优先搜索(DFS)
    def dfs(node):
        if node:
            print(node.data, end=' → ')
            for child in node.children:
                dfs(child)
    # 输出:Computer → HDD → Memory → RAM → Cache → CPU
    广度优先搜索(BFS)
    from collections import deque
    
    def bfs(root):
        queue = deque([root])
        while queue:
            node = queue.popleft()
            print(node.data, end=' → ')
            queue.extend(node.children)
    # 输出:Computer → HDD → Memory → CPU → RAM → Cache

    三、树结构的重要变体

    3.1 二叉树(Binary Tree)

    特性:每个节点最多2个子节点(left/right)

    class BinaryTreeNode:
        def __init__(self, val):
            self.val = val
            self.left = None
            self.right = None
    
    # 表达式树示例: (2+3)*4
    root = BinaryTreeNode('*')
    root.left = BinaryTreeNode('+')
    root.left.left = BinaryTreeNode(2)
    root.left.right = BinaryTreeNode(3)
    root.right = BinaryTreeNode(4)

    3.2 二叉搜索树(BST)

    特性:左子树值 < 根 < 右子树值

    插入操作实现

    def insert(root, value):
        if not root:
            return BSTNode(value)
        if value < root.val:
            root.left = insert(root.left, value)
        else:
            root.right = insert(root.right, value)
        return root

    四、六大应用场景实战

    4.1 文件系统模拟

    class FileSystemNode:
        def __init__(self, name, is_dir=False):
            self.name = name
            self.is_dir = is_dir
            self.children = []
    
    # 构建示例
    root = FileSystemNode("/", True)
    etc = FileSystemNode("etc", True)
    root.add_child(etc)
    etc.add_child(FileSystemNode("hosts"))

    4.2 其他典型应用

    1. DOM树 – 网页元素解析
    2. 决策树 – 机器学习分类
    3. 语法树 – 编译器设计
    4. 路由树 – 网络路径规划
    5. 目录树 – 知识管理系统
    6. 游戏树 – AI对战决策

    五、学习路线建议

    5.1 树结构学习五步法

    1. 理解基本概念 → 2. 手写简单实现 → 3. 掌握遍历算法
    2. 学习平衡策略(AVL树) → 5. 实践综合应用

    5.2 推荐练习题目

    难度 LeetCode题号 题目描述
    初级 144 二叉树前序遍历
    中级 105 从前序与中序构造二叉树
    高级 297 二叉树的序列化与反序列化

    六、知识拓展方向

    6.1 高阶树结构

  • 红黑树:Java HashMap底层实现
  • B+树:数据库索引核心结构
  • Trie树:搜索引擎自动补全
  • 6.2 可视化工具推荐

  • Graphviz(自动生成树形图)
  • BinaryTree(Python可视化库)
  • VisuAlgo(算法动态演示平台)
  • 作者:不辉放弃

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python树结构实现详解

    发表回复