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


    1. 题目

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

    说明:
    你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

    示例 1:

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

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

    2. 分析

    这道题的思路十分简单,由于题目将树限定为二叉搜索树,根据二叉搜索树的性质,一个节点的左孩子小于该节点的值,右孩子大于该节点的值,所以利用中序遍历可以得出这棵树从小到大的值排序,我们可以根据 k 的值判断,当顺序进行遍历的时候,遍历次数等于 k 时,当前节点的值就是第 k 小的值。

    3. 实现

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int kthSmallest(TreeNode* root, int k) {
            inorder(root, k);
            return res;
        }
    
    private:
        void inorder(TreeNode* root, int &k)
        {
            if(!root || k < 0)
                return;
            
            inorder(root->left, k);
            k--;
            if(k == 0)
                res = root->val;
            else
                inorder(root->right, k);
        }
        int res = 0;
    };
  • 相关阅读:
    sql server获取指定库下的所有表名
    sql根据字符将一行拆成多行
    刷题416. Partition Equal Subset Sum
    刷题394. Decode String
    刷题347. Top K Frequent Elements
    刷题309. Best Time to Buy and Sell Stock with Cooldown
    刷题338. Counting Bits
    刷题337. House Robber III
    刷题312. Burst Balloons
    刷题621. Task Scheduler
  • 原文地址:https://www.cnblogs.com/lawliet12/p/10833872.html
Copyright © 2020-2023  润新知