网络异常,图片无法展示
|
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
个最小元素(从 1 开始计数)。
示例 1:
网络异常,图片无法展示
|
输入: root = [3,1,4,null,2], k = 1 输出: 1 复制代码
示例 2:
网络异常,图片无法展示
|
输入: root = [5,3,6,2,4,null,null,1], k = 3 输出: 3 复制代码
提示:
- 树中的节点数为
n
。 1 <= k <= n <= 104
0 <= Node.val <= 104
进阶: 如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k
小的值,你将如何优化算法?
解题思路
二叉搜索树的性质:
对于任意一棵子树,根节点的值大于左子节点的值,根节点的值小于右子节点的值
基于以上二叉搜索树的性质,如果对二叉搜索树进行中序遍历的话,将会得到一个严格升序的序列,
获取这个序列中的第 k
个元素,就是二叉搜索树中第 k
个最小元素。
代码实现
var kthSmallest = function(root, k) { // 记录当前遍历的节点数量 let num = 0,res; // 中序遍历 function inorder(node){ if(node === null) return; inorder(node.left); num++; // 如果当前节点是第K个节点,则就是要找的第k个最小元素 if(num===k){ // 记录节点值 res = node.val // 退出递归 return; } inorder(node.right); } inorder(root); // 返回结果 return res; }; 复制代码
至此我们就完成了 leetcode-230-二叉搜索树中第K小的元素
如有任何问题或建议,欢迎留言讨论!