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);
    		}
    	}
    };


  • 相关阅读:
    ThreadPoolExecutor源码解析
    AQS框架
    (转)rvm安装与常用命令
    (转).gitignore详解
    (转)可简化iOS 应用程序开发的6个Xcode小技巧
    (转)webView清除缓存
    (转)git常见错误
    iOS本地通知
    (转)iOS获取设备型号
    (转)iOS平台UDID方案比较
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6744590.html
Copyright © 2011-2022 走看看