LeetCode 230. 二叉探索ツリーのK番目の小さい要素(C++)
二叉探索ツリーを指定し、関数kthSmallestを記述してk番目の最小要素を検索します.
説明:kは常に有効であり、1≦k≦二叉探索ツリー要素の個数であると仮定できます.
例1:
例2:
ステップアップ:二叉検索ツリーが頻繁に変更(挿入/削除操作)され、k番目の小さな値を頻繁に検索する必要がある場合、kthSmallest関数を最適化するにはどうすればいいですか?
考え方:
1つのツリーについて、シーケンスループの結果は、ツリーの各ノード値が小さいから大きいまで並べられた結果です.
説明:kは常に有効であり、1≦k≦二叉探索ツリー要素の個数であると仮定できます.
例1:
: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
: 1
例2:
: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
: 3
ステップアップ:二叉検索ツリーが頻繁に変更(挿入/削除操作)され、k番目の小さな値を頻繁に検索する必要がある場合、kthSmallest関数を最適化するにはどうすればいいですか?
考え方:
1つのツリーについて、シーケンスループの結果は、ツリーの各ノード値が小さいから大きいまで並べられた結果です.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
vector<int> vec;
public:
void dfs(TreeNode* root){
if(root == NULL)
return ;
dfs(root->left);
vec.push_back(root->val);
dfs(root->right);
}
public:
int kthSmallest(TreeNode* root, int k) {
dfs(root);
if(vec.size() >= k)
return vec[k -1];
return -1;
}
};