LC 1104 [M] Path In Zigzag Labelled Binary Tree - ALawliet/algorithms GitHub Wiki

this is more a math problem than a tree problem with the formulas:

level_min = 2**(level-1)
level_max = 2**(level) - 1
label = int((level_min + level_max - label) / 2)
class Solution:
    def pathInZigZagTree(self, label):
        res = [] # O(log n) space
        node_count = 1
        level = 1
        
        # Determine level of the label
        
        # while label >= node_count*2: # O(log n) time
        while label > 2**(level) - 1: # level max
            # node_count *= 2
            level += 1
            
        # Iterate from the target label to the root
        while label != 0: # O(log n) time
            res.append(label)
            
            level_min = 2**(level-1)
            level_max = 2**(level) - 1
            print(f'{level}: {level_min}-{level_max} ({label})')
            label = int((level_min + level_max - label) / 2) # next label at next level
            print(f'jump label {label}')
            
            level -= 1
            
        return res[::-1] # O(n) time