<p>In an infinite binary tree where every node has two children, the nodes are labelled in row order.</p>

<p>In the odd numbered rows (ie., the first, third, fifth,...), the labelling is left to right, while in the even numbered rows (second, fourth, sixth,...), the labelling is right to left.</p>

<p><img alt="" src="https://assets.leetcode.com/uploads/2019/06/24/tree.png" style="width: 300px; height: 138px;" /></p>

<p>Given the <code>label</code> of a node in this tree, return the labels in the path from the root of the tree to the&nbsp;node with that <code>label</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> label = 14
<strong>Output:</strong> [1,3,4,14]
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> label = 26
<strong>Output:</strong> [1,2,6,10,26]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= label &lt;= 10^6</code></li>
</ul>

class Solution:
    def pathInZigZagTree(self, label: int) -> List[int]:
        
        row = math.ceil(math.log(label, 2)) 

        # Edge case where i.e log(16)/log(2) is 4
        # but the row number should really be 5
        if math.log(label, 2).is_integer():
            row+=1

        res = []
        
        while row > 0:
            res.append(label)

            parent = math.ceil((label-1) / 2)
            start = (2**(row-1) // 2)
            end = (2**(row-1)) - 1

            
            if parent - start <= end - parent:
                parent = end-(parent-start)
            else:
                parent = start + (end-parent)
            
            label = parent
            row -= 1

            
        
        return res[::-1]






16700