数据结构 玩转数据结构 12-4 旋转操作的基本原理

发布时间 2023-04-11 07:58:46作者: 菜鸟乙

0    课程地址

https://coding.imooc.com/lesson/207.html#mid=14349

 

1    重点关注

1.1    二分搜索树的性质  代码草图

 

 

 

 

1.2    破坏二分搜索树的四种情况

 

 

1.3    左左情况解析

 

 

 

1.4    左左情况解决:右旋转(图中应该是右旋转)

 

 

 

 

2    课程内容


 

3    Coding

3.1    coding

案例:傲慢与偏见 统计单词

 

关键代码

//3     递归,添加元素
    public void add(K key,V value,Node root){
        //3.1   终止条件
        //3.1.1 要插入的元素和二叉树原有节点相同,这个不用判断,因为已经调了containsKey方法判断了
        /*if(key.equals(root.e)){
            return;
        }*/

        //3.1.2 最终插入左孩子
        if(key.compareTo(root.key)<0 && root.left==null){
            root.left = new Node(key,value);
            size++;
            return;
        }

        //3.1.2 最终插入右孩子
        if(key.compareTo(root.key)>0 && root.right == null){
            root.right = new Node(key,value);
            size++;
            return;
        }

        //3.2   递归
        //3.2.1 递归左孩子
        if(key.compareTo(root.key)<0){
            add(key,value,root.left);
        }

        //3.2.2 递归右孩子
        if(key.compareTo(root.key)>0){
            add(key,value,root.right);
        }
        root.height = 1+Math.max(getHeight(root.left),getHeight(root.right));
        int balanceFactor = getBalanceFactor(root);
        if(Math.abs(balanceFactor)>1){
            System.out.println("unbalanced:"+balanceFactor);
        }

        //左左情况
        if(balanceFactor>1&&getBalanceFactor(root.left)>=0){

        }
    }