跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

二叉搜索树中第 k 小的元素与二叉树的所有路径算法解析

综述由AI生成二叉搜索树中第 K 小元素的查找利用中序遍历特性,结合计数器剪枝优化,仅需遍历前 K 个节点即可找到目标值,避免全量遍历。二叉树所有路径的生成采用深度优先搜索(DFS)配合回溯策略,使用局部变量记录当前路径,在遇到叶子节点时将完整路径存入结果集,并在递归返回时恢复现场。代码实现基于 C++,展示了具体的类结构与递归逻辑,适用于理解递归、搜索与回溯算法在树结构中的应用。

leon发布于 2026/3/29更新于 2026/6/729 浏览
二叉搜索树中第 k 小的元素与二叉树的所有路径算法解析

10. 二叉搜索树中第 k 小的元素

题目链接:

230. 二叉搜索树中第 K 小的元素 - 力扣(LeetCode)

题目描述:

文章配图

题目示例:

文章配图

解法:中序遍历 + 计数器剪枝
算法思路:

上述解法不仅使用大量额外空间存储数据,并且会将所有的结点都遍历一遍。但是,我们可以根据中序遍历的过程,只需扫描前 k 个结点即可。因此,我们可以创建一个全局的计数器 count,将其初始化为 k,每遍历一个节点就将 count--。直到某次递归的时候,count 的值等于 0,说明此时的结点就是我们要找的结果。

C++ 算法代码:
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int count, ret = 0;
    int kthSmallest(TreeNode* root, int k) {
        count = k;
        dfs(root);
        return ret;
    }
    void dfs(TreeNode* root) {
        if(root == nullptr || count == 0) {
            return;
        }
        dfs(root->left);
        if(--count == 0) {
            ret = root->val;
            return;
        }
        dfs(root->right);
    }
};
算法总结及流程解析:

文章配图

11. 二叉树的所有路径

题目链接:

257. 二叉树的所有路径 - 力扣(LeetCode)

题目描述:

文章配图

题目示例:

文章配图

解法:回溯
算法思路:

使用深度优先遍历 (DFS) 求解。路径以字符串形式存储,从根节点开始遍历,每次遍历时将当前节点的值加入到路径中,如果该节点为叶子节点,将路径存储到结果中。否则,将 "->" 加入到路径中并递归遍历该节点的左右子树。

定义一个结果数组,进行递归。递归具体实现方法如下:

  1. 如果当前节点不为空,就将当前节点的值加入路径 path 中,否则直接返回;
  2. 判断当前节点是否为叶子节点,如果是,则将当前路径加入到所有路径的存储数组 path 中;
  3. 否则,将当前节点值加上 "->" 作为路径的分隔符,继续递归遍历当前节点的左右子节点;
  4. 返回结果数组。

特别地,我们可以只使用一个字符串存储每个状态的字符串,在递归回溯的过程中,需要将路径中的当前节点移除,以回到上一个节点。

C++ 算法代码:
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    // 用全局变量 ret 记录所有路径,全局不会受到递归回溯的影响
    vector<string> ret;
    vector<string> binaryTreePaths(TreeNode* root) {
        string path; // 用局部变量 path 记录路径的值,不用全局变量是为了便于回溯时'恢复原状'
        dfs(root, path);
        return ret;
    }
    void dfs(TreeNode* root, string path) {
        // 递归的结束条件:当前结点为空则结束递归进行返回
        if(root == nullptr) {
            return;
        }
        // 当遇到叶子结点时则不用再添加箭头,并且此时一条路径已经结束,
        // 用 string 数组 ret 进行记录并且直接返回
        if(root->left == nullptr && root->right== nullptr) {
            path += to_string(root->val);
            ret.push_back(path);
            return;
        }
        // 前序遍历
        path += to_string(root->val);
        path += "->";
        dfs(root->left, path);
        dfs(root->right, path);
    }
};
算法总结及流程解析:

文章配图

文章配图

目录

  1. 10. 二叉搜索树中第 k 小的元素
  2. 题目链接:
  3. 题目描述:
  4. 题目示例:
  5. 解法:中序遍历 + 计数器剪枝
  6. 算法思路:
  7. C++ 算法代码:
  8. 算法总结及流程解析:
  9. 11. 二叉树的所有路径
  10. 题目链接:
  11. 题目描述:
  12. 题目示例:
  13. 解法:回溯
  14. 算法思路:
  15. C++ 算法代码:
  16. 算法总结及流程解析:
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Qwen3-TTS 和 Whisper ASR 的双向语音对话系统搭建
  • Java 数组全面解析:定义、内存与工具类
  • VSCode 远程 SSH 下 Copilot Claude 模型与 Agent 模式配置指南
  • Mac 新手指南:__MACOSX 文件夹来源与删除方法
  • OpenClaw 本地部署教程:环境配置、插件开发与常见问题排查
  • Java 集合框架核心:Map 与 Set 深度解析
  • 从小学到顶尖科学家:AI、数学、物理、信息学经典书单推荐
  • 2025年AI写作工具实战测评:寻找真正适配网文创作的工具
  • DooTask 轻量级项目管理与 AI 协同功能解析
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署、推理与微调实践
  • Web 应用架构解析与安全漏洞实战指南
  • 低代码开发:企业应用搭建的高效方案
  • 大厂 Android 开发面试真题与核心知识点汇总
  • 基于 Docker 部署 Nginx 并通过内网穿透实现远程访问
  • FAST_LIO 与 FAST_LIO2 算法原理及 ROS2 环境复现
  • OpenClaw + cpolar 实现本地 AI 远程访问与内网穿透应用
  • Whisper 开源语音识别工具安装与使用指南
  • 多模态大模型 API 调用与本地部署成本对比分析
  • LLaMA-Factory 微调 Qwen3-VL 详细流程
  • 2026 年主流网络爬虫工具对比评测与选型指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online