题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
//二叉具有如下性质:
// 左子树不为空则左子树上的所有节点的值均小于根节点,右子树不为空,则右子树上的所有节点的值均大于根节点
// 因此这道题相当于中序遍历二叉树
class Solution {
public:
void getKNode(TreeNode *pNode, int* current, int k, int &val) {
if(pNode == NULL || *current > k) return;
if(pNode->left != NULL && *current < k) {
getKNode(pNode->left, current, k, val);
}
(*current)++;
if (*current == k) {
val = pNode->val;
return;
}
if(pNode->right != NULL && *current < k) {
getKNode(pNode->right, current, k, val);
}
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot == NULL || k <= 0) return NULL;
int val = -1;
int current_min = 0;
getKNode(pRoot, ¤t_min, k, val);
if(current_min < k) return NULL;
TreeNode *tmp = new TreeNode(val);
return tmp;
}
};
问题总结:写的时候居然current忘记设计成引用或者是指针传递了,结果就一直返回二叉树的根节点,还是自己不够细心