[LeetCode] Kth Smallest Element in a BST

來源:互聯網
上載者:User

標籤:

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.

 

     這道題和之前那個next() method的差不多,不過多了一個k值在這裡。

     題目以及提示了我們要藉助BTS的definition來做,遵循這樣的順序:左<根<右

     因此在最開始我們先add了所有最右邊的treenode後,並不是就萬事大吉了,結點之間的右邊的Node們同樣重要。

     舉例:stack.pop()出目前的最小值後(只store了左邊的treenode的情況下),再pop()一次就一定是第二小的嗎?肯定不是的,如果這個最小值的node的node.right!=null的話,很明顯node.right的值會小於倒數第二個結點。(說的有點混亂,可畫圖理解=。=)

     因此我們再pop()出目前最小值後,再第二次pop()之前應該馬上檢測其Node.right並把這些值都按順序store進stack,然後再藉助if statement第二次運行。

     代碼如下。~

public class Solution {    public int kthSmallest(TreeNode root, int k) {    Stack<TreeNode> stack = new Stack<TreeNode>();    TreeNode p = root;    int result = 0;     while(!stack.isEmpty() || p!=null){        if(p!=null){            stack.push(p);            p = p.left;        }else{            TreeNode temp = stack.pop();            k--;            if(k==0){                result = temp.val;            }            p = temp.right;        }    }     return result;}}

 

     

[LeetCode] Kth Smallest Element in a BST

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.