Skip to content

Commit 17d4382

Browse files
authored
Create 1104.path-in-zigzag-labelled-binary-tree.js
1 parent 299963e commit 17d4382

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number} label
3+
* @return {number[]}
4+
*/
5+
const pathInZigZagTree = function(label) {
6+
const res = [], { log2, floor, ceil } = Math
7+
8+
res.push(label)
9+
10+
// check last row
11+
const lev = ceil(log2(label + 1))
12+
const reverse = lev % 2 === 0 ? true : false
13+
// console.log(reverse, lev)
14+
if(reverse) {
15+
const idx = 2 ** lev - 1 - label
16+
label = 2 ** (lev - 1) + idx
17+
}
18+
// console.log(label)
19+
20+
while(label > 1) {
21+
const level = floor(log2(label))
22+
const parent = floor(label / 2)
23+
const parentLevelNum = 2 ** (level - 1)
24+
const parentReverse = level % 2 === 0 ? true : false
25+
const parentStart = 2 ** (level - 1)
26+
const parentEnd = 2 ** level - 1
27+
// console.log(parentStart, parentEnd, parent)
28+
const idx = parent - parentStart
29+
res.push(parentReverse ? parentEnd - idx : parentStart + idx)
30+
31+
label = parent
32+
}
33+
34+
35+
res.reverse()
36+
return res
37+
};

0 commit comments

Comments
 (0)