给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

    示例 1:
    输入:root = [3,1,4,null,2], k = 1
    输出:1

    示例 2:
    输入:root = [5,3,6,2,4,null,null,1], k = 3
    输出:3

    二叉搜索树的中序遍历结果是一个升序序列
    利用二叉搜索树的中序遍历是一个升序序列的特性,即可从中序遍历序列中获取第 k 小的元素

    1. /**
    2. * 利用二叉搜索树的中序遍历结果是一个升序序列的特性,从中序遍历序列中获取
    3. * @param root
    4. * @param k
    5. * @return
    6. */
    7. public int kthSmallest(TreeNode root, int k) {
    8. List<Integer> valList = new ArrayList<>();
    9. inOrder(root, valList);
    10. return valList.get(k - 1);
    11. }
    12. /**
    13. * 二叉搜索树的中序遍历结果是一个升序序列
    14. *
    15. * @param node
    16. * @param valList
    17. */
    18. private void inOrder(TreeNode node, List<Integer> valList) {
    19. if (node == null) {
    20. return;
    21. }
    22. inOrder(node.left, valList);
    23. valList.add(node.val);
    24. inOrder(node.right,valList);
    25. }