LeetCode: Path In Zigzag Labelled Binary Tree Posted on August 25, 2019July 26, 2020 by braindenny Path In Zigzag Labelled Binary Tree Similar Problems: CheatSheet: Leetcode For Code Interview CheatSheet: Common Code Problems & Follow-ups Tag: #zigzag, #manydetails, #binarytree, #complement 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. Example 1: 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: // 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 } Post Views: 0