当前位置: 首页 > news >正文

深度优先 一直往一个方向走,可用递归或者栈实现

你说得对,英文里 DFS 确实是 Depth-First Search(深度优先搜索),而中文“递归方法”只是实现手段之一,它们不是完全等价的概念,但在二叉树操作中往往相关。让我帮你理清楚:


1️⃣ DFS 和递归的关系

  • DFS(深度优先搜索) 是一种 访问节点的策略,特点是尽可能沿一条分支访问到底再回溯

  • 递归 是实现 DFS 的常用手段,但 DFS 也可以用栈迭代来实现。

  • 所以在二叉树翻转里:

    root.left, root.right = root.right, root.left
    invertTree(root.left)
    invertTree(root.right)
    

    这就是 DFS 思路 + 递归实现:

    • 先处理根节点

    • 再沿左子树 DFS

    • 再沿右子树 DFS


2️⃣ 举例:翻转二叉树的 DFS 顺序

假设原始二叉树:

        4/ \2   7/ \ / \1  3 6  9

DFS 递归访问顺序

  1. 访问根节点 4 → 交换左右子树 → 左子树变 7,右子树变 2

  2. 递归左子树(原来的右子树 7):

    • 访问 7 → 交换左右子树 → 左 9,右 6

    • 递归 9 → 是叶子节点,返回

    • 递归 6 → 是叶子节点,返回

  3. 递归右子树(原来的左子树 2):

    • 访问 2 → 交换左右子树 → 左 3,右 1

    • 递归 3 → 是叶子节点,返回

    • 递归 1 → 是叶子节点,返回

翻转后:

        4/ \7   2/ \ / \9  6 3  1

✅ 可以看到,DFS 是 访问顺序,递归只是实现 DFS 的一种方便方法。


3️⃣ DFS vs BFS 对比

方法访问顺序实现手段例子(翻转二叉树)
DFS根 → 左 → 右(或其他深度优先顺序)递归或栈上面例子就是 DFS 顺序翻转
BFS一层一层 → 从左到右队列levelOrder 层序遍历

如果你愿意,我可以帮你画一个 DFS 翻转二叉树的访问顺序示意图,把节点访问顺序和交换顺序标出来,比文字更直观。

你希望我画吗?

http://www.dtcms.com/a/363850.html

相关文章:

  • 电子电子技术知识------MOSFET管
  • 【Kubernetes】知识点2
  • 深入解析Linux进程概念与操作系统核心
  • 嵌入式系统与51单片机全解析
  • 3.ImGui-窗体
  • 大模型推理加速深度对比:vLLM vs TensorRT-LLM vs ONNX Runtime,谁是生产环境最优解?
  • 【智能体开发】怎样提升AI智能体的运行速度?
  • 重新审视信任基石:公网IP证书对网络安全生态的影响
  • 多态——面向对象编程的 “灵活密码”
  • p049基于Flask的医疗预约与诊断系统
  • Linux 安装docker-compose安装方法(安装docker compose安装)
  • Android Activity 任务栈详解
  • 一种简单而有效的融合时空特征嵌入的城区多变量长序列风速预测模型
  • 基于Springboot和Vue的前后端分离项目
  • MD5加密算法详解与实现
  • Python-Flask企业网页平台深度Q网络DQN强化学习推荐系统设计与实现:结合用户行为动态优化推荐策略
  • Dockerfile 自动化构建容器镜像
  • OpenStack:典型的面向服务架构(Service-Oriented Architecture, SOA)
  • Java Bitmap 去重:原理、代码实现与应用
  • 广东省省考备考(第九十二天9.2)——言语(刷题巩固第一节课)
  • 从全栈开发到微服务架构:一次真实的Java全栈面试经历
  • 子进程、父进程
  • 高效数据传输的秘密武器:Protobuf
  • Linux系统:进程信号的处理
  • TKDE-2022《Low-Rank Linear Embedding for Robust Clustering》
  • 【机器学习深度学习】向量模型与重排序模型:RAG 的双引擎解析
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • keycloak中对接oidc协议时设置prompt=login
  • 机器学习回顾——决策树详解
  • SOL中转转账教程