본문 바로가기
알고리즘 문제풀이/leetcode

[leetcode 230] Kth Smallest Element in a BST

by m2162003 2020. 10. 4.

k번째 숫자 찾기

 

방법

- 전체를 inorder로 순회해서 벡터에 담는다.

- k번째 원소를 꺼낸다.

 

class Solution {
public:
    
    void Traverse(TreeNode* root, vector<int> &inorder){
        if(root == nullptr){
            return;
        }
        
        Traverse(root->left, inorder);
        inorder.push_back(root->val);
        Traverse(root->right, inorder);
    }
    
    int kthSmallest(TreeNode* root, int k) {
        vector<int>inorder;
        Traverse(root, inorder);
        return inorder[k-1];
    }
};

 

- 더 빠른 방법

stack을 사용해서 inorder를 만든다. 바로 k번째 원소를 리턴한다.

using namespace std;
class Solution {
public:
  
    
    int kthSmallest(TreeNode* root, int k) {
       stack<TreeNode *>s;
        int result;
        
        while(!s.empty() || root != nullptr){
            while(root != nullptr){
                s.push(root);
                root = root->left;
            }
            root = s.top();
            s.pop();
            k--;
            
            if(k==0){
                result = root->val;
                break;
            }
            
            root = root->right;
            
        }
        
        return result;
    }
};

댓글