zoukankan      html  css  js  c++  java
  • 二叉搜索树中第K小的元素

    给定一个二叉搜索树,编写一个函数 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
    进阶:
    如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

    /**
     * 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) {
            if(!root||k<0)
                return 0;
            
            int res=0,index=0;;
            kthSmallestCore(root,k,res,index);
            return res;
        }
    private:
        void kthSmallestCore(TreeNode* root,int k,int& res,int& index)//同一节点的左右子树虽然在同一层但是在排序二叉树中的位置不一样,index记录的是每个元素的位置,所以要传递引用
        {
            if(!root)
                return ;
    
            kthSmallestCore(root->left,k,res,index);
            if(++index==k)
            {
                res=root->val;
                return ;
            }
    
            kthSmallestCore(root->right,k,res,index);
        }
    };
  • 相关阅读:
    重要:VC DLL编程
    VC++程序员如何做好界面
    复习二叉搜索树作的几道题
    eclipse JAVA反编译
    秒,毫秒,微秒,纳秒,皮秒,飞秒
    redis实现tomcat集群session共享
    redis启用持久化
    Spring
    Spring scope
    FastJSON 使用
  • 原文地址:https://www.cnblogs.com/tianzeng/p/11967595.html
Copyright © 2011-2022 走看看