概述
给定一个二叉搜索树的根节点 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
提示:
树中的节点数为 n 。
1 <= k <= n <= 104
0 <= Node.val <= 104
思路1:
中序遍历二叉搜索树,得到一个有序的集合,集合里的第k个就是答案
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int kthSmallest(TreeNode root, int k) {
String s = "";
List<Integer> list = new ArrayList<>();
travel( root, list );
int out = 0;
out = list.get( k-1 );
return out;
}
private void travel(TreeNode node, List<Integer> list) {
if( node == null )
return;
travel( node.left, list );
list.add( node.val );
travel( node.right, list );
}
}
思路2(优化,不需要全部遍历完整棵树,不过其实思路一也是不需要遍历完的,结果if判断即可):
中序遍历,遍历到第k个停止即可
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int kthSmallest(TreeNode root, int k) {
String s = "";
int out = 0;
Stack<Integer> stack = new Stack();
travel1( root, stack, k );
out = stack.pop();
return out;
}
private void travel1(TreeNode node, Stack<Integer> stack, int k ) {
if( node == null )
return;
travel1( node.left, stack, k );
if( stack.size() == k )
return;
stack.push( node.val );
travel1( node.right, stack, k );
}
}
最后
以上就是孝顺小蝴蝶为你收集整理的230. 二叉搜索树中第K小的元素 java解决的全部内容,希望文章能够帮你解决230. 二叉搜索树中第K小的元素 java解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复