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;
}
};
'알고리즘 문제풀이 > leetcode' 카테고리의 다른 글
[leetcode 621] Task Scheduler (0) | 2020.10.05 |
---|---|
[leetcode 71] Simplify Path (0) | 2020.10.05 |
[leetcode 98] Validate Binary Search Tree (0) | 2020.10.04 |
[leetcode 94] Binary Tree Inorder Traversal (0) | 2020.10.04 |
[leetcode 102] Binary Tree Level Order Traversal (0) | 2020.10.03 |
댓글