二叉查找树获取第K大元素

题目描述:采用二分查找获取树中第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;

  }

}

你可能感兴趣的:(二叉查找树获取第K大元素)