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


  • 相关阅读:
    实验一 开发环境的熟悉(小组)
    第六章家庭作业
    Linux常用命令-1
    Linux简介
    Python for写死循环?
    python将某个列表按元素值分成多个子列表
    xshell 5连接NAT模式的虚拟机
    python中remove的一些坑
    Sender IP字段为"0.0.0.0"的ARP请求报文
    免费ARP
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6744590.html
Copyright © 2011-2022 走看看