LeetCode Java刷题笔记— 230. 二叉搜索树中第K小的元素

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记— 230. 二叉搜索树中第K小的元素相关的知识,希望对你有一定的参考价值。

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

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

中等难度,这道题和剑指 Offer 54. 二叉搜索树的第k大节点非常的相似,解法也是一样的套路,我们使用中序遍历,然后遍历一次进行k自减1,当k为0时对应的元素就是第k小的节点。

迭代法:

public int kthSmallest(TreeNode root, int k) 
    if (root == null) 
        return 0;
    
    LinkedList<TreeNode> queue = new LinkedList<>();
    //中序遍历
    while (!queue.isEmpty() || root != null) 
        while (root != null) 
            queue.addFirst(root);
            root = root.left;
        
        root = queue.removeFirst();
        //如果k为0,则此时节点就是第k小的节点
        if (--k == 0) 
            return root.val;
        
        root = root.right;
    
    return 0;

递归法:

int k, res;

public int kthSmallest(TreeNode root, int k) 
    this.k = k;
    dfs(root);
    return res;


void dfs(TreeNode node) 
    if (node == null) 
        return;
    
    dfs(node.left);
    --k;
    if (k < 0) 
        return;
    
    if (k == 0) 
        res = node.val;
        return;
    
    dfs(node.right);

以上是关于LeetCode Java刷题笔记— 230. 二叉搜索树中第K小的元素的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题模版:221 - 230

LeetCode刷题模版:221 - 230

LeetCode刷题模版:221 - 230

LeetCode Java刷题笔记—226. 翻转二叉树

LeetCode Java刷题笔记—101. 对称二叉树

LeetCode Java刷题笔记—101. 对称二叉树