栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

叉搜索树中第K小的元素 题目描述:

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

示例 1: 

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

 示例 2:

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

链接:

230. 二叉搜索树中第K小的元素 - 力扣(LeetCode) (leetcode-cn.com)

解题思路  思路一:递归

中序遍历其实是对其进行排序操作,并且是按从小到大的顺序排序,所以输出第k个即可

var kthSmallest = function(root, k) {
    let res = null;
    let inOrderTraverseNode = function (node) {
        if (node !== null && k > 0) {
            // 先遍历左子树
            inOrderTraverseNode(node.left);
            // 
            if (--k === 0) {
                res = node.val;
                return;
            }
            inOrderTraverseNode(node.right);
        }
    }
    inOrderTraverseNode(root);
    return res;
};

时间复杂度: O(k)

空间复杂度: O(1),不考虑递归栈所占用的空间,空间复杂度为O(1)

思路二:迭代
var kthSmallest = function(root, k) {
    let stack = [], node = root;
    while(node || stack.length) {
        // 遍历左子树
        while(node) {
            stack.push(node);
            node = node.left;
        }
        node = stack.pop();
        if (--k === 0) {
            return node.val;
        }
        node = node.right;
    }
    return null;
};

 

时间复杂度: O(H + K)

空间复杂度: O(H + K)

参考资料: 力扣

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号