【算法训练】LeetCode#230 二叉搜索树中第K小的元素
一、描述
230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 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个。但是既然已经遍历到最深层了,是不是可以在遍历的时候就计数,当达到第k个时返回呢?尝试一下
三、解题
public static 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;
}
}
public static class Solution {
int sums = 0;
int ans = 0;
boolean over = false;
public int kthSmallest(TreeNode root, int k) {
process(root,k);
return ans;
}
// 中序遍历树,并记录当前为第几个节点cur,当cur==k时返回val
public void process(TreeNode root,int k){
if (over){
return;
}
if (root == null){
return ;
}
process(root.left,k);
sums++;
if (sums == k){
ans = root.val;
over = true;
return ;
}
process(root.right,k);
}
}