考察知识点: 中序遍历、递归、二叉搜索树

题目分析:

 题目中要求出第k轻的牛牛。实际上,对于一棵二叉搜索树,它的中序遍历是递增的。例如 1,2,3,4,5,6

alt

 因此,可以通过中序遍历得到二叉搜索树中的第k小的数。

 中序遍历即先访问左子树,然后访问根节点,之后访问右子树。在代码中按照这个顺序进行递归即可。

所用编程语言: C++

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param k int整型 
     * @return int整型
     */
    void traverse(TreeNode *root, int &k, int &ans) {
        if (!root) return;
        traverse(root->left, k, ans);
        k--;
        if (k == 0) {
            ans = root->val;
            return;
        }
        traverse(root->right, k, ans);
    }
    int kthLighest(TreeNode* root, int k) {
        // write code here
        int ans;
        traverse(root, k, ans);
        return ans;
    }
};