230.Kth Smallest Element in a BST

2024-01-04 20:08
文章标签 230 element bst kth smallest

本文主要是介绍230.Kth Smallest Element in a BST,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note: 
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.

Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

中序遍历BST

BST具有如下性质:

左子树中所有元素的值均小于根节点的值

右子树中所有元素的值均大于根节点的值

因此采用中序遍历(左 -> 根 -> 右)即可以递增顺序访问BST中的节点,从而得到第k小的元素,时间复杂度O(k)


/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int kthSmallest(TreeNode* root, int k) {stack<TreeNode *> myStack;int count = 1;while(root || !myStack.empty()){while(root){myStack.push(root);root = root->left;}if(!myStack.empty()){TreeNode *tmp = myStack.top();myStack.pop();if(count == k){return tmp->val;}root = tmp->right;++count;}}return INT_MAX;}
};


进一步思考:

如果BST节点TreeNode的属性可以扩展,则再添加一个属性leftCnt,记录左子树的节点个数

记当前节点为node当node不为空时循环:若k == node.leftCnt + 1:则返回node否则,若k > node.leftCnt:则令k -= node.leftCnt + 1,令node = node.right否则,node = node.left

上述算法时间复杂度为O(BST的高度)




这篇关于230.Kth Smallest Element in a BST的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570458

相关文章

【uva】11536-Smallest Sub-Array(区间移动问题)

一个区间移动的问题,1A了,感觉没什么好说的。。 13975926 11536 Smallest Sub-Array Accepted C++ 0.809 2014-08-01 11:00:20 #include<cstdio>#include<cstring>#include<iostream>using namespace std;#define INF 1 << 30

leetcode#496. Next Greater Element I

题目 You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1’s elements in the corresponding places of nums

element-ui打包之后图标不显示,woff、ttf加载404

1、bug 起因 昨天在 vue 项目中编写 element-ui 的树形结构的表格,发现项目中无法生效,定位问题之后发现项目使用的 element-ui 的版本是 2.4.11 。看了官方最新版本是 2.15.14,然后得知 2.4.11 版本是不支持表格树形结构的。于是决定升级 element-ui 的版本,方便后续的开发。 升级之后本地简单的过了一遍系统功能,并没有发现有什么不妥,于

当当图书福利券,满400减230,别说我没告诉你!

1024程序员节 当当网计算机图书 每满100减50! 满200减100! 满300-150! 机械工业出版社华章公司联合当当网特意为【大数据技术与架构】用户申请了一批可与满减叠加使用的“满200减30”的图书优惠码,优惠码使用后相当于: 400减230 !!!   优惠码:【YRMQMY】(注意区分大小写) 使用渠道:当当app和当当小程序 使用时间:10月22-10月31 本活动满减与礼券

深入理解二叉搜索树(BST)

一棵二叉搜索树(BST)是以一棵二叉树来组织的,可以用链表数据结构来表示,其中,每一个结点就是一个对象,一般地,包含数据内容key和指向孩子(也可能是父母)的指针属性。如果某个孩子结点不存在,其指针属性值为空(NIL)。 二叉搜索树中的关键字key的存储方式总是满足二叉搜索树的性质: 设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么会有y.key<=x.key;如果y是x右子树

Qt放Element网页滑动菜单栏

基于QTabWidget实现菜单 tabwidget.h #ifndef TAB_WIDGET_H#define TAB_WIDGET_H#include <QTabWidget>#include <QVariantAnimation>#include "customcomponent_global.h"class TabBarAnimation;class TabWidget : pu

[LeetCode] 215. Kth Largest Element in an Array

题:https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 题目 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not th

element table 表格 span-method 某一列进行相同合并 支持树结构表格

须知 这是 vue2 版本,不过理论上 vue3 也能参考使用 可以直接打开 codepen 查看代码 效果图 代码 打不开 codepen 或者codepen 失效,查看下面代码参考 <script src="//unpkg.com/vue@2/dist/vue.js"></script><script src="//unpkg.com/element-ui@2.15.14/l

Element-ui设置table 选中某行高亮自定义背景色

Element-ui设置table 选中某行高亮自定义背景色 在el-table标签中添加单选 highlight-current-row <el-table highlight-current-row @row-click="mainBodySelectionChange"></el-table> 在style中设置颜色 /* 设置当前页面element全局table 选中某行时的背景色

Vue Element Plus el-select 使用 filterable 搜索下 @blur 事件绑定失效

失效原因 使用 filterable 导致 blur 事件绑定在输入框上,而不是整个选择器上 当点击选项时,输入框失去焦点触发 blur 事件 而点击其她位置收起下拉款的时候,并不会触发输入款的 blur 事件 解决方案 使用 element 提供的 visible-change 事件进行绑定 在该事件绑定的函数上添加 visible 参数 当 visible 为 tru