• 230. 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:

      1. Try to utilize the property of a BST.
      2. What if you could modify the BST node's structure?
      3. The optimal runtime complexity is O(height of BST).

    本题开始做的时候想到了还是用前序遍历的方法来做,但是对于follow up就做不出来了,看了答案才发现,可以把二分搜索树分成三部分,一部分是二分搜索树的左子树,一部分是当前节点,一部分是二分搜索树的右子树部分。只要数出左子树的个数就可以找到第k小的元素了,代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public int kthSmallest(TreeNode root, int k) {
    12         int count = countNodes(root.left);
    13         if(k<=count) return kthSmallest(root.left,k);
    14         else if(k>count+1) return kthSmallest(root.right,k-count-1);
    15         return root.val;
    16     }
    17     public int countNodes(TreeNode node){
    18         if(node==null) return 0;
    19         return 1+countNodes(node.left)+countNodes(node.right);
    20     }
    21 }
  • 相关阅读:
    H3C ER6300 + 两台 H3C S5120 组网举例
    H3C S5120-52P-WiNet交换机配置
    H3C S5120清除console口密码
    光纤简介
    Windows server 2008 R2 多用户远程桌面
    AutoIt 软件自动化操作
    windows server 2008 R2 计划任务备份系统
    AD域部署使用bginfo软件
    使用WSL吧
    Could not load file or assembly……
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6608196.html
Copyright © 2020-2023  润新知