Question: Add to the balance function to reduce the height as much as possible. My current balance function does not seem to work with the test

Add to the balance function to reduce the height as much as possible. My current balance function does not seem to work with the test cases. Please help as I have spent days on this problem. Write your code within the X

Test #

Input

Output

1

tree = Tree()

tree.add(Node(11))

tree.add(Node(27))

tree.add(Node(18))

tree.add(Node(17))

tree.add(Node(10))

tree.add(Node(30))

tree.add(Node(40))

tree.add(Node(50))

tree.add(Node(14))

tree.add(Node(13))

tree.add(Node(8))

tree.add(Node(9))

tree.balance()

self.assertEquals(tree.height())

4

2

tree = Tree()

tree.add(Node(6))

tree.add(Node(27))

tree.add(Node(15))

tree.add(Node(10))

tree.add(Node(13))

tree.add(Node(8))

tree.balance()

self.assertEquals(tree.height())

3

##INTERLEAVE false class Node: # Node class def __init__(self, data): self.data = data self.left = None self.right = None

self.children = []

self.parent = None

class Tree: # Tree class def __init__(self): self.root = None

# If you need, use the space below to write any necessary helper functions here inside Tree class

XXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXX

def in_order_traversal(self): def dfs(node): if node: dfs(node.left) print(node.data) dfs(node.right)

dfs(self.root)

def level_order_traversal(self): if not self.root: return

queue = [self.root]

while len(queue) > 0: current_node = queue.pop(0) if current_node.left: queue.append(current_node.left) print(current_node.data) if current_node.right: queue.append(current_node.right)

def add(self,node): if not self.root: self.root = node return

def insert(root, node):

if root.data > node.data: if root.left is None: root.left = node else: insert(root.left, node) else:

if root.right is None: root.right = node else: insert(root.right, node) insert(self.root, node)

def height(self):

def get_height(node):

if node is None: return 0 else: left_height = get_height(node.left) right_height = get_height(node.right)

if left_height > right_height: return left_height +1 else: return right_height +1 return get_height(self.root)

def balance(self): """Balance the tree.""" # Add your code below to complete the tree class by adding the balance method

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

def update_height(node): node.height = 1 + max(update_height(node.left), update_height(node.right)) return node.height

def get_balance(node): if not node: return 0 return update_height(node.left) - update_height(node.right)

def rotate_right(y): x = y.left T2 = x.right x.right = y y.left = T2 update_height(y) update_height(x) return x

def rotate_left(x): y = x.right T2 = y.left y.left = x x.right = T2 update_height(x) update_height(y) return y

def balance_tree(node): if not node: return node

balance = get_balance(node) if balance > 1: if get_balance(node.left) < 0: node.left = rotate_left(node.left) return rotate_right(node) elif balance < -1: if get_balance(node.right) > 0: node.right = rotate_right(node.right) return rotate_left(node)

return node

#self.root = balance_tree(self.root)

XXXXXXXXXXXXXXXXXXXXXXXX

tree = Tree()

tree.add(Node(11)) tree.add(Node(27)) tree.add(Node(18)) tree.add(Node(17)) tree.add(Node(10)) tree.add(Node(30)) tree.add(Node(40)) tree.add(Node(50)) tree.add(Node(14)) tree.add(Node(13)) tree.add(Node(8)) tree.add(Node(9)) print("Height before balance:", tree.height()) tree.balance() print("Height after balance:", tree.height())

tree = Tree() # Creating a tree with only right branches; it is now a linked list. Try creating this tree by hand on a piece of paper. tree.add(Node(1)) tree.add(Node(3)) tree.add(Node(4)) tree.add(Node(5)) tree.add(Node(6)) tree.add(Node(7)) tree.add(Node(8)) tree.add(Node(9)) tree.add(Node(10)) tree.add(Node(11)) tree.add(Node(12)) tree.add(Node(13)) print("Height before balance:", tree.height()) tree.balance() print("Height after balance:", tree.height())

Actual Output

Height before balance: 6 Height after balance: 6 Height before balance: 12 Height after balance: 12

Expected Output

Height before balance: 6 Height after balance: 4 Height before balance: 12 Height after balance: 4 

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!