[剑指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);
    }
};

posted @ 2017-09-25 21:27  mioopoi  阅读(138)  评论(0编辑  收藏  举报