前端算法-二叉搜索树中第K小的元素

简介: 前端算法-二叉搜索树中第K小的元素

题目

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

输入: root = [3,1,4,null,2], k = 1
输出: 1

思路一

我们先判断一下当前root形参是否为空,如果为空则直接返回null,接下来在声明一个stack空数组和res空数组,用来存放每次要访问的子节点树,在声明一个p变量用于迭代,他的值是root形参,然后我们使用循环,循环条件为,当前stack数组长度不为0且p存在,然后循环中在写一个循环,在第二层循环中不停将p指向当前节点的左子树,然后推入调用栈,循环完成之后在将stack删除末位置,并用n常量存储起来删除的值,然后把n变量的val值使用push方法添加到res数组中,在将p变量指向n的右子节点树,最后将res数组的形参k-1位置的值返回出去即可

var kthSmallest = function(root, k) {
    if(!root) return null;
    let stack = [], res = []
    let p = root
    while(stack.length || p) {
       while(p) {
           stack.push(p)
           p = p.left
       }
       const n = stack.pop() 
       res.push(n.val)
       p = n.right
     }
    return res[k-1]
}

思路二

我们都知道二叉搜索树的节点都是有顺序的,所以我们这里可以使用递归进行实现,在二叉搜索树中它的任意节点也包括根节点的左子树上的节点的值都比这个节点得值小,它的右子树上的节点的值都比这个节点得值大,那么我们可以使用中序遍历,在中序遍历过后,这个节点就会从小到大进行排列,到时候我们只需要将中序遍历后的数组中的第k-1个数值返回出去即可

var kthSmallest = function(root, k) {
    const res = []
    var inOrder = (root) => {
        if(!root) return
        inOrder(root.left)
        res.push(root.val)
        inOrder(root.right)
    }
    inOrder(root)
    return res[k-1]
};


相关文章
|
24天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
38 3
|
25天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
31 4
|
2月前
|
存储 前端开发 JavaScript
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
41 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
|
2月前
|
前端开发
前端基础(十四)_隐藏元素的方法
本文介绍了几种在前端开发中隐藏元素的方法,包括使用`display:none`、`visibility:hidden`、`opacity:0`等CSS属性,并提供了相应的示例代码。此外,还提到了其他隐藏元素的技巧,如通过设置元素位置、使用`overflow`属性和`filter`属性以及`rgba`颜色值来实现元素的隐藏。
64 1
前端基础(十四)_隐藏元素的方法
|
26天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
20 0
|
2月前
|
前端开发 JavaScript
前端基础(七)_DOM元素获取(getElementById、getElementsByTagName、getElementsByClassName、querySelector等)
本文介绍了如何在前端通过不同的方法获取DOM元素,包括getElementById、getElementsByTagName、getElementsByClassName、querySelector和querySelectorAll。
91 3
|
2月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
2月前
|
前端开发 JavaScript
前端ES5 | js —添加元素方法
前端ES5 | js —添加元素方法
|
2月前
|
存储 算法 C#
C#二叉搜索树算法
C#二叉搜索树算法
|
2月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。