【leetcode】230. 二叉搜索树中第 K 小的元素

49 阅读1分钟

leetcode-230.png

理解二叉搜索树的含义,中序遍历二叉搜索树时,产生的结果就是一个有序的数列,利用这个性质来做这题。

递归

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]
};