zoukankan      html  css  js  c++  java
  • [LeetCode] 230. Kth Smallest Element in a BST

    Given the root of a binary search tree, and an integer k, return the kth (1-indexed) smallest element in the tree.

    Example 1:

    Input: root = [3,1,4,null,2], k = 1
    Output: 1
    

    Example 2:

    Input: root = [5,3,6,2,4,null,null,1], k = 3
    Output: 3

    Constraints:

    • The number of nodes in the tree is n.
    • 1 <= k <= n <= 104
    • 0 <= Node.val <= 104

    Follow up: If the BST is modified often (i.e., we can do insert and delete operations) and you need to find the kth smallest frequently, how would you optimize?

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

    因为是BST所以大概率会碰到中序遍历inorder traversal,这一题也不例外。思路就是按照中序遍历的方法去遍历BST的节点,用count记录是否到K,输出第K个节点即可。影子题671

    时间O(n)

    空间O(n)

    Java递归实现

     1 class Solution {
     2     private static int count;
     3     private static int res;
     4 
     5     public int kthSmallest(TreeNode root, int k) {
     6         count = k;
     7         helper(root);
     8         return res;
     9     }
    10 
    11     public void helper(TreeNode root) {
    12         if (root == null) {
    13             return;
    14         }
    15         helper(root.left);
    16         count--;
    17         if (count == 0) {
    18             res = root.val;
    19         }
    20         helper(root.right);
    21     }
    22 }

    Java迭代实现

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public int kthSmallest(TreeNode root, int k) {
    12         Stack<TreeNode> stack = new Stack<>();
    13         while (root != null || !stack.isEmpty()) {
    14             if (root != null) {
    15                 stack.push(root);
    16                 root = root.left;
    17             } else {
    18                 root = stack.pop();
    19                 k--;
    20                 if (k == 0) {
    21                     return root.val;
    22                 }
    23                 root = root.right;
    24             }
    25         }
    26         return Integer.MIN_VALUE;
    27     }
    28 }

    JavaScript递归实现

     1 /**
     2  * @param {TreeNode} root
     3  * @param {number} k
     4  * @return {number}
     5  */
     6 var kthSmallest = function (root, k) {
     7     let count = k;
     8     let res = 0;
     9 
    10     let helper = function (root) {
    11         if (root == null) {
    12             return;
    13         }
    14         helper(root.left);
    15         count--;
    16         if (count == 0) {
    17             res = root.val;
    18         }
    19         helper(root.right);
    20     }
    21     helper(root);
    22     return res;
    23 };

    JavaScript迭代实现

     1 /**
     2  * @param {TreeNode} root
     3  * @param {number} k
     4  * @return {number}
     5  */
     6 var kthSmallest = function (root, k) {
     7     let stack = [];
     8     while (root != null || stack.length > 0) {
     9         if (root != null) {
    10             stack.push(root);
    11             root = root.left;
    12         } else {
    13             root = stack.pop();
    14             k--;
    15             if (k == 0) {
    16                 return root.val;
    17             }
    18             root = root.right;
    19         }
    20     }
    21     return -1;
    22 };

    相关题目

    230. Kth Smallest Element in a BST

    671. Second Minimum Node In a Binary Tree

    LeetCode 题目总结

  • 相关阅读:
    成功并不是要得到什么,而是要放弃什么
    Qt一步一步实现插件通信(附源码)
    Qt一步一步实现插件调用(附源码)
    推荐大家阅读——《你的知识需要管理》
    移动商机十人谈__移动红利
    如果再不要求进步,那么你就是下一个陨落的巨头
    贫穷的本质__如何改变穷人的现状?
    贫穷的本质__缺乏对未来的信心和长远规划
    痛苦并愉快的被洗着_品牌洗脑
    Qt_Pro详解
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12529119.html
Copyright © 2011-2022 走看看