zoukankan      html  css  js  c++  java
  • LeetCode Kth Smallest Element in a BST

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
    
    Note: 
    You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
    
    Follow up:
    What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
    
    Hint:
    
    Try to utilize the property of a BST.
    What if you could modify the BST node's structure?
    The optimal runtime complexity is O(height of BST).
    Credits:
    Special thanks to @ts for adding this problem and creating all test cases.
    

    如果树节点结构是这样的话,直接进行中序遍历得出,如果在树中的节点添加一个count字段用于表示该子树含有的数值数量就可以在logn的时间里得出。就是一个动态计算rank的功能。

    下面是inorder的代码:

    /**
     * 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 {
    private:
        int idx;
        int value;
        int K;
    public:
        int kthSmallest(TreeNode* root, int k) {
            K = k;
            idx = 0;
            dfs(root);
            return value;
        }
        
        void dfs(TreeNode* root) {
            if (root == NULL) {
                return;
            }
            dfs(root->left);
            idx++;
            if (idx == K) {
                value = root->val;
                return;
            }
            dfs(root->right);
        }
    };
    
  • 相关阅读:
    2017-12-25
    oracle 创建表,增加修改删除字段
    jqxWidgets 常用代码
    Oracle初始化用户-表空间-权限
    Oracle 切换数据库实例
    ORE(Oracle R Enterprise)安装步骤
    Java 枚举类的基本使用
    Java可变参数
    java的封箱和拆箱
    spring 九种设计模式
  • 原文地址:https://www.cnblogs.com/lailailai/p/4619101.html
Copyright © 2011-2022 走看看