手写二叉树,更好的为红黑树做铺垫

在这里插入图片描述

二叉树:

左边的储存的值都是小于根节点的,右边的储存的值都是大于根节点的

删除操作时,选取大于当前节点的最小节点

缺点: 依赖有序数组,

数组没办法快速插入,也没办法扩容

二叉搜索树:

如果数据比较极端就会变成链表 (可用AVL平衡树来解决该问题

二分查找算法
在这里插入图片描述

    package learn;
    
    /**
     * Created with IDEA
     *
     * @author: linyi
     * @Email: linyi4843@gmail.com
     */
    public class BinarySearchTest {
    
        public static void main(String[] args) {
            int[] arr = {1,2,3,4,5,6,7,8,9,10};
            int data = 2;
            int search = binarySearch(arr, data);
            System.out.println(search);
        }
    
        public static int binarySearch(int[] arr,int data){
            //起始下标值
            int low = 0;
            //最大下标值
            int height = arr.length - 1;
    
            while (low <= height){
                // 计算出中间值下标
                int mid = low + (height - low)/2;
                if (arr[mid] < data){
                    // 如果查找值大于中间值,则把起始下标值加1
                    low = mid + 1;
                }else if(arr[mid] == data){
                    // 如果中间值等于要查找的值,直接返回下标
                    return mid;
                }else {
                    // 如果查找值小于中间值,则把最大下标值减1
                    height = mid - 1;
                }
            }
            return -1;
        }
    }

红黑树是在二叉树的基础上

1, 根节点必须为黑色

2, 红色节点下必须为黑色节点

3, 两个红色节点不能相连

LL双红 ,改变爸爸叔叔的节点为黑色,爷爷节点为红色,在进行右旋,将爷爷节点当做当前节点

LR双红 进行左旋, 变成 LL双红 将爸爸节点当做当前节点 ↑

RR双红 改变爸爸叔叔的节点为黑色,爷爷节点为红色,进行左旋当前节点

RL双红 进行右旋, 变成 RR双红 将爸爸节点当做当前节点↑

旋转完之后根据当前节点,判断是否有红红相连,然后再根据下一步做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值