<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 {
public:
    vector<int> pathInZigZagTree(int label) {
        if (label == 1) return {1};
        vector<int> output;
        int curr = label;
        while (curr >= 1) {
            output.push_back(curr);
            curr = curr / 2;
        }
        reverse(output.begin(), output.end());
        int r = (output.size() - 1) % 2;
        int st = 1;
        for (auto i = 0; i < output.size()-1; i++) {
            if (i % 2 != r) {
                output[i] = 3 * st - 1 - output[i];
            }
            st *= 2;
        }
        return output;
    }
};

// 1 2 4 8
// 2^L - 1; direction 
// 1. get original path 
7300