Path In Zigzag Labelled Binary Tree

Similar Problems:

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

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.

Given the label of a node in this tree, return the labels in the path from the root of the tree to the node with that label.

Input: label = 14 Output: [1,3,4,14]

Example 2:

Input: label = 26 Output: [1,2,6,10,26]

Constraints:

- 1 <= label <= 10^6

Github: code.dennyzhang.com

Credits To: leetcode.com

Leave me comments, if you have better ways to solve.

- Solution:

// Blog link: https://code.dennyzhang.com/path-in-zigzag-labelled-binary-tree // Basic Ideas: // Caculate the level // Get the complement number // For one level, the range of nodes: start, start+1, ... 2*start-1 // Complexity: Time O(log(n)), Space O(1) func pathInZigZagTree(label int) []int { start, level, num := 1, 1, 1 for num < label { num = 2*num+1 start = 2*start level++ } res := make([]int, level) for label >0 { res[level-1] = label if level%2 == 0 { label = 3*start-1-label } label=label/2 start=start/2 level-- if level%2 == 0 { label = 3*start-1-label } } return res }