1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Solution { public List<Integer> pathInZigZagTree(int label) {
int start = 1, end = 1; int level = 1; while (label < start || label > end) { int size = end - start + 1; int doubleSize = 2 * size;
start = end + 1; end = end + doubleSize; level++; }
LinkedList<Integer> path = new LinkedList<>(); while (level > 0) { path.addFirst(label);
if ((level & 1) == 0) { label = (start + (end - label)) / 2; } else { int prevStart = start / 2, prevEnd = end / 2; label = prevStart + (prevEnd - label / 2); }
start /= 2; end /= 2; level--; }
return path; } }
|
References
1104. Path In Zigzag Labelled Binary Tree