这是一道求kth的问题
方法1:DFS
int res = -1;
int k;
public int kthSmallest(TreeNode root, int k) {
this.k = k;
dfs(root);
return res;
}
private void dfs(TreeNode root) {
if (root.left != null) dfs(root.left);
if (--k == 0) {
res = root.val;
return;
}
if (root.right != null) dfs(root.right);
}
方法2:BFS
public int kthSmallest(TreeNode root, int k) {
Stack<TreeNode> stk = new Stack<>();
int cnt = 0;
while (!stk.isEmpty() || root != null) {
if (root != null) {
stk.push(root);
root = root.left;
} else {
TreeNode cur = stk.pop();
if (++cnt == k) return cur.val;
root = cur.right;
}
}
return -1;
}