Question: def add ( self , value: object ) - > None: new _ node = AVLNode ( value ) if self.is _ empty ( )
def addself value: object None:
newnode AVLNodevalue
if self.isempty:
self.root newnode
else:
currnode self.root
while currnode:
if value currnode.value:
return
elif value currnode.value:
if currnode.left is None:
currnode.left newnode
newnode.parent currnode
break
currnode currnode.left
else:
if currnode.right is None:
currnode.right newnode
newnode.parent currnode
break
currnode currnode.right
self.rebalancenewnode
def removeself value: object bool:
def findnodeandparentvalue:
current self.root
parent None
while current:
if value current.value:
return current, parent
elif value current.value:
parent current
current current.left
else:
parent current
current current.right
return None, None
nodetoremove, parent findnodeandparentvalue
if not nodetoremove:
return False
if not nodetoremove.left and not nodetoremove.right:
self.removenosubtreesparent nodetoremove
elif nodetoremove.left and nodetoremove.right:
self.removetwosubtreesparent nodetoremove
else:
self.removeonesubtreeparent nodetoremove
return True
def removetwosubtreesself removeparent: AVLNode, removenode: AVLNode AVLNode:
successorparent removenode
successor removenode.right
while successor.left:
successorparent successor
successor successor.left
if successorparent removenode:
successorparent.left successor.right
successor.right removenode.right
successor.left removenode.left
if not removeparent:
self.root successor
elif removeparent.left removenode:
removeparent.left successor
else:
removeparent.right successor
def balancefactorself node: AVLNode int:
if node is None:
return
return self.getheightnoderight self.getheightnodeleft
def getheightself node: AVLNode int:
Implement a method getheight.
if not node:
return
else:
return node.height
def rotateleftself node: AVLNode AVLNode:
child node.right
node.right child.left
if node.right is not None:
node.right.parent node
child.left node
node.parent child
self.updateheightnode
self.updateheightchild
return child
def rotaterightself node: AVLNode AVLNode:
child node.left
node.left child.right
if node.left is not None:
node.left.parent node
child.right node
node.parent child
self.updateheightnode
self.updateheightchild
return child
def updateheightself node: AVLNode None:
Implement a method that update the height of the node
based on the heights of its children.
node.getheight maxselfgetheightnodeleft self.getheightnoderight
def rebalanceself node: AVLNode None:
while node:
self.updateheightnode
balancefactor self.balancefactornode
if balancefactor : # Leftheavy
if self.balancefactornodeleft: # Leftleft case
node self.rotaterightnode
else: # Leftright case
node.left self.rotateleftnodeleft
node self.rotaterightnode
elif balancefactor : # Rightheavy
if self.balancefactornoderight: # Rightright case
node self.rotateleftnode
else: # Rightleft case
node.right self.rotaterightnoderight
node self.rotateleftnode
node node.parent
This is my code so far and I am getting error. Can you help me how to fix it Here is the expected test result:
Example #:
testcases
#RR
#LL
#RL
#LR
for case in testcases:
tree AVLcase
printtree
Output:
AVL preorder
AVL preorder
AVL preorder
AVL preorder
Mine is:
AVL preorder
AVL preorder
AVL preprder
AVL preorder
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
