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

    Given a binary search tree, write a function kthSmallest to find thekth 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?


    在二叉搜索树种,找到第K个元素。

    算法例如以下:

    1、计算左子树元素个数left。

    2、 left+1 = K,则根节点即为第K个元素

          left >=k, 则第K个元素在左子树中,

         left +1 <k, 则转换为在右子树中,寻找第K-left-1元素。

    代码例如以下:

    class Solution {
    public:
    	int calcTreeSize(TreeNode* root){
    		if (root == NULL)
    			return 0;
    		return 1+calcTreeSize(root->left) + calcTreeSize(root->right);		
    	}
    	int kthSmallest(TreeNode* root, int k) {
    		if (root == NULL)
    			return 0;
    		int leftSize = calcTreeSize(root->left);
    		if (k == leftSize+1){
    			return root->val;
    		}else if (leftSize >= k){
    			return kthSmallest(root->left,k);
    		}else{
    			return kthSmallest(root->right, k-leftSize-1);
    		}
    	}
    };


  • 相关阅读:
    SimpleCursorAdapter的使用
    sizeof和strlen的区别和联系总结
    设计模式-工厂方法模式
    Python第四章-字典
    Python第四章-字典
    Python第三章-字符串
    Python第三章-字符串
    Python 第二章-列表和元组
    Python 第二章-列表和元组
    设计模式-简单工厂模式
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6744590.html
Copyright © 2011-2022 走看看