-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathKthSmallestElementInABST.java
More file actions
90 lines (82 loc) · 2.04 KB
/
Copy pathKthSmallestElementInABST.java
File metadata and controls
90 lines (82 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package algorithms;
import java.util.ArrayList;
import java.util.List;
/**
* 230. Kth Smallest Element in a BST
* https://leetcode.com/problems/kth-smallest-element-in-a-bst/
* Difficulty : Medium
* Related Topics : Binary Search, Tree
*
* Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
*
*
*
* Example 1:
*
* Input: root = [3,1,4,null,2], k = 1
* 3
* / \
* 1 4
* \
* 2
* Output: 1
* Example 2:
*
* Input: root = [5,3,6,2,4,null,null,1], k = 3
* 5
* / \
* 3 6
* / \
* 2 4
* /
* 1
* Output: 3
* Follow up:
* What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
*
* Constraints:
*
* The number of elements of the BST is between 1 to 10^4.
* You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
*
* 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;
* }
* }
*
* created by cenkc on 8/12/2020
*/
public class KthSmallestElementInABST {
private List<Integer> sortedList;
/**
* Runtime: 2 ms
* Memory Usage: 43.4 MB
*
* @param root
* @param k
* @return
*/
public int kthSmallest(TreeNode root, int k) {
if (root == null) return 0;
if (k == 0) return 0;
sortedList = new ArrayList<>();
inOrderTraverse(root, k);
return sortedList.get(k - 1);
}
/**
* if we traverse a BST with In-Order traversal (DFS), we'll get the data sorted
*/
private void inOrderTraverse(TreeNode node, int k) {
if (node.left != null) inOrderTraverse(node.left, k);
if (node != null) sortedList.add(node.val);
if (node.right != null) inOrderTraverse(node.right, k);
}
}