给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
  2
输出: 1
示例 2:

输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 3
进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

/**
* 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) {
int cnt = ;
stack<TreeNode*> s;
TreeNode *p = root;
while (p || !s.empty()) {
while (p) {
s.push(p);
p = p->left;
}
p = s.top(); s.pop();
++cnt;
if (cnt == k) return p->val;
p = p->right;
}
return ;
}
};

思路:

这道题给的提示是让我们用BST的性质来解题,最重要的性质是就是左<根<右,那么如果用中序遍历所有的节点就会得到一个有序数组。使用非递归的方法,中序遍历最先遍历到的是最小的结点,那么我们只要用一个计数器,每遍历一个结点,计数器自增1,当计数器到达k时,返回当前结点值即可。

最新文章

  1. dede文章内容页增加视频文件
  2. asp.net mvc 部分视图加载区别
  3. 敏捷开发 与 Scrum
  4. Notepad++编辑Pyhton文件的自动缩进的问题(图文)
  5. JQUERY解析XML IE8的兼容问题
  6. button上加上图片的两种方式
  7. Nodejs in Visual Studio Code 01.简单介绍Nodejs
  8. Temporary failure in name resolution
  9. 电脑打不开网页,使用dns优化下就可以了。
  10. GC对象分配规则
  11. flex 布局实现固定头部和底部,中间滚动布局
  12. C#基础加强(9)之对象序列化(二进制)
  13. JSON的新方法--parse()和stringify()
  14. 杭电ACM1007
  15. RJ45连接器
  16. Ubuntu 16.04 LTS 安装Mongodb 3.4
  17. C# Winform下一个热插拔的MIS/MRP/ERP框架(简介)
  18. G 最短路
  19. gem install 和 bundle 区别
  20. EBS FORM 编译

热门文章

  1. JAVA的学习
  2. C++学习笔记(七)--共用体、枚举、typedef
  3. 在无界面centos7上部署MYSQL5.7数据库
  4. JAVA总结--泛型
  5. ES6新数据类型Symbol
  6. poj-3436.ACM Computer Factory(最大流 + 多源多汇 + 结点容量 + 路径打印 + 流量统计)
  7. 01背包(第k优解)
  8. Codeforces 990C (模拟+组合数学)
  9. jquery获取年月日时分秒当前时间
  10. C# String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)