java二叉搜索树的第K大节点

22 篇文章 0 订阅

题目

给定一个二叉搜索树,请找出其中第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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值