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.