概述
为什么80%的码农都做不了架构师?>>>
问题:
Given a binary search tree, write a function kthSmallest
to find the kth smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
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?
解决:
① 借助中序遍历。
class Solution {//3ms
public int kthSmallest(TreeNode root, int k) {
List<Integer> list = new ArrayList<>();
inorder(root,list);
int res = list.get(k - 1);
return res;
}
public void inorder(TreeNode root,List<Integer> list){
if (root == null) return;
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
② 借助栈实现中序遍历。
class Solution {//2ms
public int kthSmallest(TreeNode root, int k) {
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null){
stack.push(cur);
cur = cur.left;
}
int count = 0;
while (! stack.isEmpty()){
cur = stack.pop();
count ++;
if (count == k){
return cur.val;
}
TreeNode tmp = cur.right;
while (tmp != null){
stack.push(tmp);
tmp = tmp.left;
}
}
return -1;
}
}
③ 在中序遍历过程中查找第k小的值。
class Solution { //0ms
int count = 0;
int res = 0;
public int kthSmallest(TreeNode root, int k) {
count = k - 1;
inorder(root);
return res;
}
public void inorder(TreeNode root){
if (root == null || count < 0){
return;
}
inorder(root.left);
if (count == 0){
res = root.val;
count --;
}
count --;
inorder(root.right);
}
}
转载于:https://my.oschina.net/liyurong/blog/1591587
最后
以上就是高高流沙为你收集整理的平衡二叉树中第k小的数 Kth Smallest Element in a BST的全部内容,希望文章能够帮你解决平衡二叉树中第k小的数 Kth Smallest Element in a BST所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复