二叉搜索树的第

题目

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

牛客网

解题思路

  1. BST 中序遍历的结果就是排序后的结果
public TreeNode KthNode(TreeNode pRoot, int k) {
    TreeNode[] nodes = new TreeNode[1];

    int[] ints = {0};

    KthNode(pRoot, k, nodes, ints);

    return nodes[0];
}

private void KthNode(TreeNode root, int k, TreeNode[] res, int[] cursor) {
    if (root == null) return;

    if (res[0] != null) return;

    KthNode(root.left, k, res, cursor);
    cursor[0]++;

    if (cursor[0] == k) {
        res[0] = root;
        return;
    }

    KthNode(root.right, k, res, cursor);
}