算法题解-二叉搜索树中第K小的元素

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

题目


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


题解


第一种


我们首先在函数中先声明了一个空数组rootArr,我们这个数组用于存储树中所有节点的值,然后我们声明了一个递归函数fn,这个函数的作用是将树中所有节点的值存储到rootArr中,函数fn接受一个参数root,root参数表示当前处理的节点,fn函数首先将当前节点的值root.val存储到rootArr中,然后分别递归处理当前节点的左子树和右子树,直到遍历完整棵树,接下来我们对rootArr进行排序,方便我们以后继续查找第k小元素,由于rootArr中元素已经按照从小到大的顺序排好序了,所以我们直接将rootArr[k-1]返回即可

var kthSmallest = function (root, k) {
    const rootArr = [];
    fn(root);
    rootArr.sort((a, b) => a - b);
    return rootArr[k - 1];
    function fn(root) {
        if (!root) {
            return
        }
        rootArr.push(root.val);
        if (root.left) {
            fn(root.left);
        }
        if (root.right) {
            fn(root.right);
        }
    }
};


第二种


我们在函数中先声明了一个空数组res,用于存储树中所有节点的值,然后我们声明了三个变量,p和index以及n,变量p用于表示当前处理的节点,它的初始值为root,变量index用于表示当前处理的节点是第几个节点,它的初始值为0,变量n用于表示从res中取出的节点,然后我们使用while循环遍历整棵树,循环条件为res数组不为空或者p不为空,在循环中,我们首先使用while循环将p的所有左子树节点都压入res数组中,然后从res数组中弹出一个节点n,并将index加1,如果index等于k,则说明当前节点就是第k小的节点,直接返回n的值,如果当前节点存在右子树,则将p指向右子树的根节点,以便继续遍历右子树,如果当前节点不存在右子树,则p的值会在下一个循环中从res数组中取出即可

var kthSmallest = function(root, k) {
    let res=[]
    let p=root
    let index=0
    while(res.length||p){
        while(p){
            res.push(p)
            p=p.left
        }
        let n=res.pop()
        index++
        if(index===k){
            return n.val
        }
        if(n.right) p=n.right
    }
};
相关文章
|
9天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
4月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
85 3
|
11天前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
26天前
|
存储 算法 安全
U 盘管控情境下 Python 二叉搜索树算法的深度剖析与探究
在信息技术高度发达的今天,数据安全至关重要。U盘作为常用的数据存储与传输工具,其管控尤为关键。本文探讨Python中的二叉搜索树算法在U盘管控中的应用,通过高效管理授权U盘信息,防止数据泄露,保障信息安全。二叉搜索树具有快速插入和查找的优势,适用于大量授权U盘的管理。尽管存在一些局限性,如树结构退化问题,但通过优化和改进,如采用自平衡树,可以有效提升U盘管控系统的性能和安全性。
25 3
|
6月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
4月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
88 4
|
5月前
|
存储 算法 C#
C#二叉搜索树算法
C#二叉搜索树算法
|
8月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
83 1
|
8月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
8月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素

热门文章

最新文章