# Modify Binary Tree by replacing each node with nearest power of minimum of previous level

import math class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def nearestPow(x, base): k = int(math.log(x, base)) if abs(base**k – x) < abs(base**(k+1) - x): return base**k else: return base**(k+1) def printLevelOrder(root): if root is None: return q = [] q.append(root) while q: count = len(q) while count > 0: temp = q.pop(0) print(temp.val, end=’ ‘) if temp.left: q.append(temp.left) if temp.right: q.append(temp.right) count -= 1 def replaceNodes(root): que = [root] lvl = 1 minPrev = root.val minCurr = root.val while True: length = len(que) if not length: break minPrev = minCurr minCurr = 1000000000000000000 while length: temp = que.pop(0) minCurr = min(temp.val, minCurr) temp.val = nearestPow(temp.val, minPrev) if temp.left: que.append(temp.left) if temp.right: que.append(temp.right) length -= 1 lvl += 1 printLevelOrder(root) root = TreeNode(7)root.left = TreeNode(4)root.right = TreeNode(11)root.left.right = TreeNode(23) replaceNodes(root)