二叉搜索树的第k个节点:最直观的想法是,中序遍历二叉搜索树,这样得到的遍历结果是有序的,使用一个变量num表示当前距离第k个节点还剩几个节点,其初始为k,使用一个变量value表示第k个节点值,其初始为-1。在中序遍历的过程中,将num减一,并且判断当前num是否等于0,如果是则返回当前节点对应的值,即value等于cur->val,最后返回value即可。

    int num=0;
    int value=-1;
    void InOrder(TreeNode* cur)
    {
        // 空节点返回
        if(cur==nullptr)
            return;
        InOrder(cur->left);
        // 中间节点
        num--;
        if(num==0)
            value=cur->val;
        InOrder(cur->right);
    }
    int KthNode(TreeNode* proot, int k) {
        num=k;
        InOrder(proot);
        return value;
    }