题目:给定一棵二叉搜索树,请找出其中第k大节点。
基本思路:由二叉搜索树特性可知,中序遍历正是它的递增排序。因此只需要用中序遍历去遍历一棵二叉搜索树,就能找到第k大节点。
java实现:
public class FindKInTree {
public static class BinaryTreeNode {
int value;
BinaryTreeNode left;
BinaryTreeNode right;
}
//数组存储,避免传值问题
public static BinaryTreeNode findKInTree(BinaryTreeNode root,int[] k) {
if(root==null||k[0]==0) {
return null;
}
BinaryTreeNode result=null;
//遍历左子树
if(root.left!=null) {
result=findKInTree(root.left,k);
}
if(k[0]==1) {
result=root;
}
k[0]--;
//遍历右子树
if(root.right!=null&&result==null) {
result=findKInTree(root.right,k);
}
return result;
}
}