给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
package factory;
import sun.reflect.generics.tree.Tree;
import tree.TreeNode;
/**
* @Description: 二叉搜索树中第K小的元素
* 解法:二叉搜索树就是左节点<根节点<右节点,所有使用中序遍历的方式可以从小到大排除这个二叉树
* https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/269/tree/1165/
* @Author: Jaryn
* @Date: 2019/12/10 16:43
*/
public class KthSmallest {
static int num;
static int count;
public static void main(String[] args) {
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode1 = new TreeNode(1);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode2 = new TreeNode(2);
treeNode3.setLeft(treeNode1);
treeNode3.setRight(treeNode4);
treeNode1.setRight(treeNode2);
System.out.println(kthSmallest(treeNode3, 1));
}
public static int kthSmallest(TreeNode root, int k) {
num = 0;
count = 0;
recur(root, k);
return num;
}
public static void recur(TreeNode node, int k) {
if(node == null || count >= k) {
return;
}
recur(node.getLeft(), k);
if(count < k) {
count++;
num = node.getVal();
}
recur(node.getRight(), k);
}
}