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)
Original page link
Best Cool Tech Gadgets
Top favorite technology gadgets
 
 
 
 
0 comments:
Post a Comment