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

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

深度优先搜索

  • 思路:
    • 二叉搜索树的特性,通过中序遍历得到有序序列,则遍历到第K个节点的时候即为结果;
    • 使用栈通过深度优先遍历进行中序遍历:
      • 先将节点和左子节点压栈;
      • 然后栈顶上就是“最左”叶子节点;
      • 然后通过栈回溯其父节点 p ,将 p 右子树压栈,重复上述过程;
/**
 * 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 kthSmallest(TreeNode* root, int k) {
        std::stack<TreeNode*> stack;
        TreeNode* node = root;
        while (node != nullptr || stack.size() > 0) {
            while (node != nullptr) {
                stack.push(node);
                node = node->left;
            }

            node = stack.top();
            stack.pop();
            --k;
            if (k == 0) {
                break;
            }
            node = node->right;
        }

        return node->val;
    }
};


http://www.kler.cn/news/163454.html

相关文章:

  • OpenGL 着色器程序的保存和加载(二进制)
  • 【C语言】——函数递归,用递归简化并实现复杂问题
  • 预训练--微调
  • WordPress使用Swiper实现图片灯箱功能
  • uniapp引入插件市场echarts图表(l-echart)实现小程序端图表,并修改源码简化使用
  • 文本编辑软件:Ulysses mac介绍说明
  • 老胡的周刊(第119期)
  • Java程序设计实验6 | 集合类
  • springboot(ssm寝室小卖部系统 宿舍小商店网站Java(codeLW)
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • vscode创建python虚拟环境
  • kennard-stone算法实现样本集划分(ks算法)
  • 思维链(CoT)提出者 Jason Wei:关于大语言模型的六个直觉
  • C#-快速剖析文件和流,并使用
  • 【Linux ping命令检查服务器是否可用】
  • mysql支持的整数类型、各类型整数能够表示的数值范围
  • python:mplfinance 画K线图+布林线
  • 【C++】map/multimap/set/multiset的经典oj例题 [ 盘点&全面解析 ] (28)
  • git如何配置多个远程仓库,并且进行切换
  • Qt 容器QGroupBox带有标题的组框框架
  • 二叉树的层序遍历[中等]
  • C++基础 -42- STL库之list链表
  • Qt 鼠标左键推拽界面
  • bash中通过变量中的内容获取对应的关联数组
  • Navicat 技术指引 | 适用于 GaussDB 分布式的日志查询与配置设置
  • JWT介绍及演示
  • 自动抓取App数据
  • 笔记-基于CH579M模块通过网线直连电脑进行数据收发(无需网络)
  • 搜索引擎和网络浏览器之间的区别
  • 【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系