0% found this document useful (0 votes)
2 views

code

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

code

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

class TreeNode:

def __init__(self, node_id, data):


self.id = node_id
self.data = data
self.left = None
self.right = None

def __repr__(self):
return f'TreeNode(id={self.id}, data={self.data})'

def build_tree(node_dict):
if not node_dict:
return None
node = TreeNode(node_dict['id'], node_dict['data'])
if 'left' in node_dict:
node.left = build_tree(node_dict['left'])
if 'right' in node_dict:
node.right = build_tree(node_dict['right'])
return node

def find_highest_data_path(node):
if not node:
return []
if not node.left and not node.right:
return [node]
left_path = find_highest_data_path(node.left)
right_path = find_highest_data_path(node.right)
if sum(n.data for n in left_path) > sum(n.data for n in right_path):
return [node] + left_path
else:
return [node] + right_path

input_data = {
"id": "SE1",
"data": 10,
"left": {
"id": "SE2",
"data": 12,
"left": {
"id": "SE4",
"data": 4,
"right": {
"id": "SE8",
"data": 9,
"left": {
"id": "SE15",
"data": 20
}
}
},
"right": {
"id": "SE5",
"data": 17,
"left": {
"id": "SE9",
"data": 10,
"left": {
"id": "SE16",
"data": 8,
"right": {
"id": "SE17",
"data": 18
}
}
},
"right": {
"id": "SE10",
"data": 11
}
}
},
"right": {
"id": "SE3",
"data": 7,
"left": {
"id": "SE6",
"data": 6,
"left": {
"id": "SE11",
"data": 18
},
"right": {
"id": "SE12",
"data": 2
}
},
"right": {
"id": "SE7",
"data": 3,
"left": {
"id": "SE13",
"data": 13
},
"right": {
"id": "SE14",
"data": 15
}
}
}
}

root = build_tree(input_data)
highest_path = find_highest_data_path(root)

result = [(node.id, node.data) for node in highest_path]


print(result)

subordinates_count = {
"SE1": 5,
"SE2": 4,
"SE5": 3,
"SE9": 2,
"SE16": 0,
"SE17": 0
}

total_bonus = 3000000
sales_bonus_share = 0.75 * total_bonus
subordinate_bonus_share = 0.25 * total_bonus
total_subordinates = sum(subordinates_count[node_id] for node_id, _ in result)
total_sales = sum(node_data for _, node_data in result)

bonus_distribution = []
for node_id, node_data in result:
subordinate_efficiency = subordinates_count.get(node_id, 0) /
total_subordinates if total_subordinates > 0 else 0
subordinate_bonus = subordinate_efficiency * subordinate_bonus_share
sales_efficiency = node_data / total_sales if total_sales > 0 else 0
sales_bonus = sales_efficiency * sales_bonus_share

total_node_bonus = subordinate_bonus + sales_bonus


bonus_distribution.append({"id": node_id, "bonus": round(total_node_bonus)})

print("Bonus distribution:")
print(bonus_distribution)

You might also like