0
このコードは、BSTでk番目に小さい要素を返すことです。Kth BST再帰的解の最小要素
/**
* 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 {
public:
int fid;
void inorder(TreeNode* node, int& fid, int& k) {
if (!node) return;
inorder(node->left, fid, k);
if (!k) return;
fid = node->val;
k--;
inorder(node->right, fid, k);
}
int kthSmallest(TreeNode* root, int k) {
inorder(root, fid, k);
return fid;
}
};
正しい答えが得られました。 私はinorder関数とkthSmallest関数を組み合わせてコードを単純化できると考えました。
class Solution {
public:
int fid;
int kthSmallest(TreeNode* root, int k) {
if (!root) return fid;
kthSmallest(root->left, k);
if (!k) return fid;
fid = root->val;
k--;
kthSmallest(root->right, k);
return fid;
}
};
それは間違った答えを与えました。 BST {2,1} k = 1を入力すると、1ではなく2が返されます。 なぜ2つのコードが異なるのか分かりません。ご協力いただきありがとうございます!