题目描述:采用二分查找获取树中第K大的元素
算法描述:二叉查找树按照中序遍历后,可以使得遍历后的元素有序,可以借助这一个特性来实现,二叉查找树遍历可以根据递归遍历,也可以借助一个栈来实现,下面借助栈实现中序遍历,实现获取第K大的元素
public class BSTGetTopK {
public static NodekthNode(Node root, int k){
if(root==null || k<0){
return null;
}
Node cur = root;
Stack> stack =new Stack<>();
int count =0;
while (!stack.isEmpty()||cur!=null){
if(cur!=null){
stack.push(cur);
cur = cur.left;
}
else{
cur = stack.pop();
count++;
if(count==k){
return cur;
}
cur = cur.right;
}
}
return null;
}
public static void main(String[] args){
Node root =new Node<>(9);
root.left =new Node<>(5);
root.right =new Node<>(13);
root.left.left =new Node<>(2);
root.left.right =new Node<>(6);
root.right.left =new Node<>(10);
root.right.right =new Node<>(14);
}
}
class Node {
public Nodeleft;
public Noderight;
public T value;
public Node(T value){
this.value = value;
}
}
网友评论