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?

 1 /**

 2  * Definition for a binary tree node.

 3  * struct TreeNode {

 4  *     int val;

 5  *     TreeNode *left;

 6  *     TreeNode *right;

 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 8  * };

 9  */

10 class Solution {

11 public:

12     int kthSmallest(TreeNode* root, int k) {

13         stack <TreeNode*> tmp_s;

14         TreeNode* tmp=root;

15         while(tmp!=NULL){

16             tmp_s.push(tmp);

17             tmp=tmp->left;

18         }

19         while(k>0&&(tmp!=NULL||!tmp_s.empty())){

20             if(tmp==NULL){

21                 tmp=tmp_s.top();

22                 tmp_s.pop();

23                 if(--k==0)

24                     return tmp->val;

25                 tmp=tmp->right;

26             }

27             else{

28                 while(tmp!=NULL){

29                     tmp_s.push(tmp);

30                     tmp=tmp->left;

31                 }

32             }

33         }

34         return tmp->val;

35     }

36 };

 

你可能感兴趣的:(element)