关闭

Kth Smallest Element in a BST

标签: c++二叉树
142人阅读 评论(0) 收藏 举报
分类:
  1. 问题

    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.

  2. 解答
    class Solution1 {
    public:
         
        int kthSmallest(TreeNode* root, int k) {
            inorderTraversal(root); 
             return res[k-1];
        }
        
      void inorderTraversal(TreeNode* root) 
        {
            if(root)
            {
                
                inorderTraversal(root->left);
                res.push_back(root->val);
                inorderTraversal(root->right);
            }
         //   return res;
        }
        
    private:
         vector<int> res;
    };
    
    class Solution2 {
    public:
         
        int kthSmallest(TreeNode* root, int k) 
        {
             vector<int> res;
             int sum=0;
             vector<TreeNode *> f1;
             
             while(root)
             {
                 f1.push_back(root);
                 root=root->left;
             }
             TreeNode *temp;
             while(!f1.empty() )
             {
                temp=f1.back();
                 
                 
                res.push_back(temp->val);
                sum++;
                if(sum==k) return temp->val;
                f1.pop_back();
                     
                  
                 if(temp->right!=NULL)
                 {
                     TreeNode *f=temp->right;
                     while(f)
                     {
                           f1.push_back(f);
                           f=f->left;
                     }
                 }
               
             }
        }
    };
    
    class Solution {
    public:
         
        int kthSmallest(TreeNode* root, int k) 
        {
            int sum=0;
            stack<TreeNode *> f1;
            // inorder
            while(root || !f1.empty())
            {
                while(root)
                {
                    f1.push(root);
                    root=root->left;
                }
                if(!f1.empty())
                {
                    TreeNode *temp;
                    temp=f1.top();
                    sum++;
                    if(sum==k) return temp->val;
                    f1.pop();
                    
                    if(temp->right!=NULL)
                    {
                        root=temp->right;
                    }
                }
                
                
            }
        }
        
    };


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11525次
    • 积分:527
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条