-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathPathInZigzagLabelledBinaryTree.java
55 lines (53 loc) · 1.47 KB
/
PathInZigzagLabelledBinaryTree.java
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*https://leetcode.com/problems/path-in-zigzag-labelled-binary-tree/*/
class Solution {
public List<Integer> pathInZigZagTree(int label) {
double val = (Math.log(label)/Math.log(2));
int level = (int)Math.ceil(val);
if (Math.ceil(val) == val)
++level;
int[] LtoR = new int[level], RtoL = new int[level];
int copy = label, i = 0;
while (copy > 0)
{
LtoR[i++] = copy;
copy /= 2;
}
copy = 3*(int)Math.pow(2,level-1)-1-label;
i = 0;
while (copy > 0)
{
RtoL[i++] = copy;
copy /= 2;
}
List<Integer> path = new ArrayList<Integer>();
boolean flag = true;
for (i = 0; i < level; ++i)
{
if (flag)
path.add(0,LtoR[i]);
else path.add(0,RtoL[i]);
flag = !flag;
}
return path;
}
}
class Solution {
public List<Integer> pathInZigZagTree(int label) {
double val = (Math.log(label)/Math.log(2));
int level = (int)Math.ceil(val);
if (Math.ceil(val) == val)
++level;
List<Integer> path = new ArrayList<Integer>();
int curr = label, i;
for (i = level-1; i >= 0; --i)
{
if (i%2 == level%2)
{
path.add(0,3*(int)Math.pow(2,i)-1-curr);
}
else path.add(0,curr);
curr /= 2;
}
return path;
}
}