230. Kth Smallest Element in a BST

题干简述:

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

二叉检索树:该树的节点均满足其左子节点小于该节点,其左子节点大于该节点

解题思路

umm,这题在 leetcode 上面的难度是 medium 就挺 umm。利用二叉检索树的性质,我们可以很快的发现,当对二叉检索树进行中序遍历后得到的结果,必然是一个递增的数组,获取 BST 的第 k 个最小元素,也就是取数组的下标为 k-1 的数据。二叉树的中序遍历,大家可以参考我的 94. Binary Tree Inorder Traversal ,里面有详细介绍递归,迭代与 mirror 三种解法。

题解

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(root, k) {
    if (!root) return null;
    const res = [];
    const dfs = (node) => {
        if (!node) return;
        dfs(node.left);
        res.push(node.val);
        dfs(node.right);
    };
    dfs(root);
    return res[k - 1] ? res[k - 1] : null;
};

Q.E.D.


Take it easy