TheKthsmallestelementinabinarysearchtree题目描述:给定一个二叉搜索树的根节点root和一个整数k,请设计一个算法找到第k个其中最小的元素(从1开始计数)。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。解法一:二叉树的中序遍历二叉搜索树的特点是中序遍历的结果就是节点的顺序,所以通过中序遍历找到第k小的元素。过程如下:先判断特例,如果二叉树为空,说明不存在第K小节点,直接返回empty;中序遍历得到二叉查找树的所有节点,节点排列顺序;如果k大于二叉树的节点数,说明没有第k小的节点Node,直接返回空;返回第K个最小节点。importcom.kaesar.leetcode.TreeNode;importjava.util.ArrayList;importjava.util.List;publicclassLeetCode_230{publicstaticintkthSmallest(TreeNoderoot,intk){//如果二叉树为空,表示没有第K个小节点,直接returnemptyif(root==null){return-1;}Listvalues=newArrayList<>();//中序遍历依次获取二叉搜索树的所有节点inOrder(root,values);//如果k大于二叉树的节点数,则表示没有第k小的节点,返回空if(k>values.size()){return-1;}//返回前K个小节点returnvalues.get(k-1);}/***二叉树的中序遍历**@paramroot*@paramvalues*/privatestaticvoidinOrder(TreeNoderoot,Listvalues){if(root.left!=null){inOrder(root.left,值);}值。添加(root.val);if(root.right!=null){inOrder(root.right,values);}}publicstaticvoidmain(String[]args){/***测试用例:*3*14*2*/TreeNoderoot=newTreeNode(3);root.left=newTreeNode(1);root.right=newTreeNode(4);root.left.right=newTreeNode(2);//预期输出:1System.out.println(kthSmallest(root,1));}}[每日留言]我们希望今天比昨天好,明天对我们来说太远了,没关系我这辈子做不了萤火虫,我要永远做钻工,永远在我的头上,为前面的光而努力,而不是看后面的东西。我们希望,不管我们的过去有多美好,都是因为我们过去的努力。不管我们今天多么努力,都是为了明天的辉煌。