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

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

你说得对,英文里 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.xdnf.cn/news/19785.html

相关文章:

  • 点燃汽车电子与高端制造的“合规·高效·智能”引擎—— 全星研发项目管理软件系统APQP软件系统
  • vim中常见操作及命令
  • 浏览器内存 (JavaScript运行时内存)存储的优劣分析
  • 常见机械机构的图graph表示
  • LeetCode 844.比较含退格的字符串
  • Redis的删除策略:内存满了,谁先走?
  • 自从不小心踢了一脚主机之后,电脑频繁蓝屏、死机、无法开机……
  • vscode无法复制terminal信息
  • TypeScript Awaited:一招搞定异步函数返回值类型
  • 【JavaScript】读取商品页面中的结构化数据(JSON-LD),在不改动服务端情况下,实现一对一跳转
  • Nano Banana 复刻分镜,多图结合片刻生成想要的视频
  • 年轻教师开学焦虑破解:从心出发,重构健康工作生活新秩序
  • Unity核心概率④:MonoBehavior
  • RAGFlow——知识库检索系统开发实战指南(包含聊天和Agent模式)
  • 硬件板级设计笔试题目-基础篇-卷8
  • 纯前端html英文字帖图片生成器自动段落和换行
  • 人体姿态估计与动作分类研究报告
  • 文字识别接口-文字识别技术-ocr api
  • Corrosion: 1靶场渗透
  • 职业院校汽车专业数字化课程资源包——虚拟仿真实训资源建设方案
  • 解密llama.cpp CUDA后端:512 token大模型批处理的异步流水线架构
  • Redis 的压缩列表:像快递驿站 “紧凑货架“ 一样的内存优化结构
  • Web3 开发者周刊 65 | DAT的崛起
  • 相较于传统AR矿物鉴定有哪些优势?
  • 从“叠加”到“重叠”:Overlay 与 Overlap 双引擎驱动技术性能优化
  • 趣味学RUST基础篇(HashMap)
  • QML的focus与activeFocus
  • 【Vue2 ✨】Vue2 入门之旅(九):Vue Router 入门
  • 从“人海战术”到“AI协同”:良策金宝AI如何助力设计院数智化跃迁?
  • NLP×第六卷:她给记忆加了筛子——LSTM与GRU的贴靠机制