题目
给定一个二叉搜索树,请找出其中第K大的节点。例如下图中的二叉搜索树里,按节点数值大小顺序,第三大节点的值是4。
思路
中序遍历,然后查找
测试用例
1.功能测试(左斜树、右斜树、普通树)
2.边界值测试(k=1,k=结点数目)
3.特殊测试(null,k <=0,k>结点数目)
Java代码
public class KthNode {
public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
//构造函数
public TreeNode(int val){
this.val=val;
}
}
public static void constrctTree(TreeNode root, TreeNode left,TreeNode right){
root.left=left;
root.right=right;
return;
}
public static void inOrderRe(TreeNode root,ArrayList list){
if (root==null)
return;
inOrderRe(root.left,list);
list.add(root.val);
inOrderRe(root.right,list);
}
public static void main(String[] args) {
TreeNode nodeA1=new TreeNode(5);
TreeNode nodeA2=new TreeNode(3);
TreeNode nodeA3=new TreeNode(7);
TreeNode nodeA4=new TreeNode(2);
TreeNode nodeA5=new TreeNode(4);
TreeNode nodeA6=new TreeNode(6);
TreeNode nodeA7=new TreeNode(8);
constrctTree(nodeA1,nodeA2,nodeA3);
constrctTree(nodeA2,nodeA4,nodeA5);
constrctTree(nodeA3,nodeA6,nodeA7);
ArrayList list=new ArrayList();
inOrderRe(nodeA1,list);
Scanner in=new Scanner(System.in);
int k=in.nextInt();
System.out.println(list);
System.out.println(list.get(k-1));
}
}