理解二叉搜索树的含义,中序遍历二叉搜索树时,产生的结果就是一个有序的数列,利用这个性质来做这题。
递归
var kthSmallest = function (root, k) {
let res = []
var inorder = function (node) {
if (!node) return
inorder(node.left)
res.push(node.val)
inorder(node.right)
}
inorder(root)
return res[k - 1]
};
非递归
var kthSmallest = function (root, k) {
let res = []
var inorder = function (node) {
let stack = []
// 利用current来跟踪当前节点
let current = node
while (current || stack.length) {
while (current) {
stack.push(current)
current = current.left
}
current = stack.pop()
res.push(current.val)
current = current.right
}
}
inorder(root)
return res[k - 1]
};