[剑指offer] 二叉搜索树的第k个节点
// 思路是中序遍历很容易想到,但是一次做到bug free不容易。
// 关键是正确更新计数变量的方法。
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k) {
int cnt = 0;
return DFS(pRoot, k, cnt);
}
private:
TreeNode* DFS(TreeNode* root, int k, int& cnt) {
if (root == NULL) {
return NULL;
}
TreeNode* ret = DFS(root->left, k, cnt);
if (ret != NULL) return ret;
cnt++;
if (cnt == k) {
return root;
}
return DFS(root->right, k, cnt);
}
};