leetcode刷题12
今天刷的题是LeetCode230题,该题是给定一个二叉搜索树,要求查找其中第k个最小的元素,并且你可以假定k总是有效的
我这里采用的是暴力解法,具体的思路是层级遍历,将二叉树的值放入到一个list中,然后排序。当然排序可以用collections.sort,但是我这里是自己写的快排。具体的代码如下:
import LeetcodePart6.TreeNode; import java.util.*; public class kthSmallest_230_middle { private static List<Integer> result; public static int solution1(TreeNode root,int k){ //暴力法求解:先把所有的节点的值都遍历出来,放在一个数组中,然后在排序 int i=1; List<Integer> number=new ArrayList<>(); Queue<TreeNode> list=new LinkedList<>(); list.add(root); while (i!=0){ TreeNode node=list.poll(); number.add(node.val); if (node.right!=null)list.add(node.right); if (node.left!=null)list.add(node.left); i--; if (i==0){ i=list.size(); } } //排序,使用快排 quickSort(number,0,number.size()-1); return number.get(k-1); } public static List<Integer> quickSort(List<Integer> num,int start,int end){ if (start>=end) return num; int q=partition(num,start,end); quickSort(num,start,q-1); quickSort(num,q+1,end); return num; } public static int partition(List<Integer> num,int start,int end){ int pivot=num.get(end); int i=start; for (int j = start; j <=end-1 ; j++) { if (num.get(j)<pivot){ int temp=num.get(i); num.set(i,num.get(j)); num.set(j,temp); i++; } } int temp=num.get(i); num.set(i,num.get(end)); num.set(end,temp); return i; } }