题目
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k ****个最小元素(从 1 开始计数)。
示例1
输入: root = [3,1,4,null,2], k = 1
输出: 1
题解
搜索二叉树中序遍历,得到的数组严格递增;
这很重要
所以方法1
递归
递归得到中序遍历数组,返回第k-1的数即可
var kthSmallest = function (root, k) {
const array = [];
helper(root);
return array[k - 1];
function helper(root) {
if (root === null) return;
if (array.length === k) return;
helper(root.left);
array.push(root.val);
helper(root.right);
}
};
递归优化
中序遍历将数据放在数组中,返回数组第k-1位数据,这一步是可以优化的,在中序遍历过程中记录枚举到的第k-1个数,记录下来,中序遍历结束,直接返回
var kthSmallest = function (root, k) {
let result = null
function helper(node) {
if (!node || result !== null) {
return
}
helper(node.left)
k--
if (k === 0) {
result = node.val
}
helper(node.right)
}
helper(root)
return result
}