剑指offer-二叉搜索树的第k个结点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

思路

二叉搜索树的中序遍历是非降序排序的。

因此可以考虑做中序遍历,然后遍历一个结点k–,当k为0时,就找到了第k个结点

code

int kk = 0;
TreeNode res = null;

void mid(TreeNode pRoot)
{
    // 中序遍历
    if(pRoot==null) {
        return;
    }
    mid(pRoot.left);
    kk--;
    if(kk == 0) {
        res =  pRoot;
    }
    mid(pRoot.right);
}

TreeNode KthNode(TreeNode pRoot, int k)
{
    kk = k;
    mid(pRoot);
    return res;
}