題目:
給定一棵二叉搜索樹,請找出其中的第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忘記設計成引用或者是指針傳遞了,結果就一直返回二叉樹的根節點,還是自己不夠細心