1. 程式人生 > 其它 >AVL樹-刪除操作(維護平衡的操作)

AVL樹-刪除操作(維護平衡的操作)

技術標籤:二分搜尋樹

 public Node remove(Node node,int data){
           if( node == null )
               return null;

           Node retNode=node;
            if (data==node.data){
             if (node.left!=null&&node.right!=null){
                 Node min = findMin(node.right);
                 Node remove =
remove(node.right, node.right.data); node.right=remove; node.data=min.data; retNode=node; }else if (node.left!=null){ retNode= node.left; } else if (node.right!=null){ retNode=
node.right; }else{ return null; } } if (node.data>data){ node.left= remove(node.left,data); } if (node.data<data){ node.right=remove(node.right,data); } retNode.
heigh= Math.max(getHeigh(retNode.left),getHeigh(retNode.right))+1; int balance = getBalance(retNode); //LL if (balance<-1&&getBalance(retNode.right)<=0){ return leftRoate(retNode); } //RR if (balance>1&&getBalance(retNode.left)>=0){ return rightRoate(retNode); } //LR if (balance>1&&getBalance(retNode.left)<0){ retNode.left=leftRoate(retNode.left); return rightRoate(retNode); } //RL if (balance<-1&&getBalance(retNode.right)>0){ retNode.right=rightRoate(retNode.right); return leftRoate(retNode); } return retNode; }

刪除一個節點,回溯到父節點重新計算平衡因子,和插入操作計算一模一樣