给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
BST(Binary Search Tree)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
看到二叉搜索树,应该立刻想到它的一个性质,它的中序遍历输出的是一个升序数组。
4
/ \
2 5
/ \
1 3
中序:左-根-右
顺序:1-2-3-4-5
思路:中序遍历整棵树,遍历返回一个数组,第K小的元素也就是数组中的第K-1个数
class Solution {
List<Integer> array = new ArrayList<>();//中序遍历生成数组
public int kthSmallest(TreeNode root, int k) {
int res = inorderTraversal(root).get(k-1);
return res;
}
public List<Integer> inorderTraversal(TreeNode root){
if(root == null)
return null;
inorderTraversal(root.left);
array.add(root.val);
inorderTraversal(root.right);
return array;
}
}