BST 递归解中的第 k 个最小元素
Kth Smallest Element in a BST recursive solution
此代码用于返回 BST 中的第 k 个最小元素。
/**
* 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 函数和 kthTiny 函数组合在一起来简化代码。
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,它将返回 2 而不是 1。我不知道为什么两个代码不同。感谢您的帮助!
作为参数int& k
(通过引用)和int k
(通过值)之间存在很大差异。
在第一种情况下,对k
所做的任何更改(例如 k--
)都会反映在作为参数传递的调用函数的变量中。
在第二种情况下,函数接收自己的k
副本,对其所做的任何更改都不会影响调用函数。
你可以改变你的kthSmallest
,把k
作为参考(int &
),但这会改变你被允许调用它的方式。您可能仍然需要一个帮助程序函数,但您可以将所有代码放入其中。
相关文章:
- 数组元素打印的递归方法
- 打包可变参数模板具有零元素时的递归
- 如何基于元组元素进行递归?
- 如何在C++中递归地找到max元素的索引?
- 递归搜索n元树中的元素
- 尝试递归获取数组元素的总和
- 如果 x,递归不起作用,我的函数只能删除第一个元素
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 如何递归枚举每个元素都有上限的所有可能的数组
- 使用递归C++向量元素的总和
- 从链接列表(通过递归)中删除元素
- 以C++递归方式对链表中的元素求和
- 如何使用递归从集合中选择所有可能的元素组合
- 递归函数,返回向量中所有元素的总和
- 将数组传递到空隙函数,然后递归打印元素
- 使用递归方法的类,使用int矢量元素作为输入
- 我想通过递归获取列表元素的所有置换
- C++:使用递归和引用变量查找数组中的最大元素
- BST 递归解中的第 k 个最小元素