如何用 Python 实现树结构

一、树结构基础认知

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(算法动态演示平台)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值