zoukankan      html  css  js  c++  java
  • 平衡二叉树 -单旋转

    平衡二叉树 -单旋转

    右旋转

    当左子树的高度减去右子树的高度的结果大于1时进行右旋转

    即针对于左左型(LLR,LLL)

    具体步骤

    1.创建一个新的结点,结点的值为不平衡结点的值

    2.新节点的右孩子为不平衡结点的右孩子结点

    3.新节点的左孩子为不平衡结点左孩子结点的右孩子结点

    4.不平衡结点的值改为其左孩子结点的值

    5.不平衡结点的左孩子修改为其左孩子结点的左孩子结点

    6.不平衡结点的右孩子修改为新结点

    实现代码

        /**
         * 右旋转
         * 如果左子树高度-右子树高度大于1进行右旋转
         */
        public void rightRotate(){
    
            //创建新的结点新结点的值为当前结点的值
            BinarySortNode newNode = new BinarySortNode(this.value);
            //新建结点的右孩子结点为当前结点的右孩子结点
            newNode.setRight(this.getRight());
            //新建结点的左孩子结点为当前结点的左孩子结点的右孩子结点
            newNode.setLeft(this.getLeft().getRight());
            //当前结点的右孩子结点为新建结点
            this.setRight(newNode);
            //当前结点的值为当前结点的左孩子结点的值
            this.setValue(this.getLeft().getValue());
            //当前结点的左孩子结点为当前结点的左孩子结点的左孩子结点
            this.setLeft(this.getLeft().getLeft());
          
    
        }
    

    左旋转

    当右子树的高度减去左子树的高度的结果大于1时进行右旋转

    即针对于右右型(RRR,RRL)

    具体步骤

    1.创建一个新的结点,结点的值为不平衡结点的值

    2.新节点的左孩子为不平衡结点的左孩子结点

    3.新节点的右孩子为不平衡结点右孩子结点的左孩子结点

    4.不平衡结点的值改为其右孩子结点的值

    5.不平衡结点的右孩子修改为其右孩子结点的右孩子结点

    6.不平衡结点的左孩子修改为新结点

    实现代码

    
        /**
         * 左旋转
         * 如果右子树高度-左子树高度的值大于1进行左旋转
         */
        public void leftRotate(){
    
            //创建新的结点新结点的值为当前结点的值
            BinarySortNode newNode = new BinarySortNode(this.value);
            //新结点的左孩子结点为当前结点的左孩子结点
            newNode.setLeft(this.getLeft());
            //新结点的右孩子结点为当前节点的右孩子结点的左孩子结点
            newNode.setRight(this.getRight().getLeft());
            //当前结点的左孩子结点为新建结点
            this.setLeft(newNode);
            //当前结点的值为当前结点右孩子结点的值
            this.setValue(this.getRight().getValue());
            //当前结点的右孩子结点为当前结点的右孩子结点的右孩子结点
            this.setRight(this.getRight().getRight());
            
    
        }
    
  • 相关阅读:
    你必须知道的.Net 8.4.4 位枚举
    你必须知道的.Net 8.2.3 覆写 Equals
    你必须知道的.Net 8.2.2 本质分析
    【日 志】
    你必须知道的.Net 【特 性】Attribute
    【GC】
    用vhd挂载并安装win7且建立分差vhd
    让win7安装时出现版本选项
    vdi、vhd、vmdk虚拟格式转换
    移动硬盘/U盘上装Windows 7旗舰版(VHD版)
  • 原文地址:https://www.cnblogs.com/huangshen/p/13394012.html
Copyright © 2011-2022 走看看