[路飞]_二叉搜索树中第K小的元素

1,220 阅读1分钟

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

题目

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

示例1

image.png

输入: 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
}