二叉搜索树中查找比指定值大的最小值;二叉搜索树中查找比指定值小的最大值

题目要求:
1、二叉搜索树中查找比指定值大的最小值;
2、二叉搜索树中查找比指定值小的最大值
说明:本文二叉搜索树中不包含重复值

@Data
    class Node{
        private Node left;
        private Node right;
        private int data;

        public Node(int data){
           this.data=data;
        }
    }

    /**
     * 二叉搜索树中(没有重复值时) 查找比target大的最小值
     * @param node
     * @param target
     */

    public Integer find1(Node node, int target){
        if(node == null)return null;
        if(node.data <= target){
        //这里目的是从根节点向下找,直到找到第一个比target大的节点。
           return find1(node.right, target);
        } else {
        //找到第一个比target大的节点(记为node0)后,比target大的最小值肯定在node0的左子树内。
        //所以查找左子树,返回值为空说明左子树没有结果,则去当前节点值
            Integer x= find1(node.left, target);
            return (x == null) ? node.data : x;
        }
    }

    /**
     * 二叉搜索树中(没有重复值时) 查找比target小的最大值
     * @param node
     * @param target
     */

    public Integer find2(Node node, int target){
        if(node == null)return null;
        if(node.data >= target){
            return find2(node.left, target);
        } else {
            Integer x= find2(node.right, target);
            return (x == null) ? node.data : x;
        }
    }

    @Test
    public void findtest(){
        Node node10 = new Node(10);//root
        Node node5 = new Node(5);
        node10.left=node5;
        Node node18 = new Node(18);
        node10.right=node18;
        Node node1 = new Node(1);
        Node node6 = new Node(6);
        Node node17 = new Node(17);
        Node node19 = new Node(19);
        Node node7 = new Node(7);
        Node node16 = new Node(16);
        node5.left=node1;
        node5.right=node6;
        node6.right=node7;
        node18.left=node17;
        node18.right=node19;
        node17.left=node16;

        int target = 18;
        System.out.println("比 " + target + "大的最小值是:" + find1(node10, target));
        System.out.println("比 " + target + "小的最大值是:" + find2(node10, target));
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐崇拜234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值