import
java.util.*;
class
GFG
{
static
class
node
{
int
data;
node left, right;
}
static
node temp;
static
node newNode(
int
data)
{
temp =
new
node();
temp.data = data;
temp.left = temp.right =
null
;
return
temp;
}
static
void
printCurrLevel(node root,
int
level,
boolean
flag)
{
if
(root ==
null
)
return
;
if
(level ==
1
)
{
System.out.print(root.data +
" "
);
return
;
}
else
{
if
(flag)
{
printCurrLevel(root.right, level -
1
, flag);
printCurrLevel(root.left, level -
1
, flag);
}
else
{
printCurrLevel(root.left, level -
1
, flag);
printCurrLevel(root.right, level -
1
, flag);
}
}
}
static
int
height(node root)
{
if
(root ==
null
)
return
0
;
int
lh = height(root.left);
int
rh = height(root.right);
return
1
+ Math.max(lh, rh);
}
static
void
modifiedLevelOrder(node root)
{
int
h = height(root);
boolean
flag =
false
;
for
(
int
i =
1
; i <= h; i++)
{
printCurrLevel(root, i, flag);
System.out.println(
""
);
if
(i %
2
==
0
)
flag = !flag;
}
}
public
static
void
main(String[] args)
{
node root = newNode(
1
);
root.left = newNode(
2
);
root.right = newNode(
3
);
root.left.left = newNode(
4
);
root.left.right = newNode(
5
);
root.right.left = newNode(
6
);
root.right.right = newNode(
7
);
root.left.left.left = newNode(
8
);
root.left.left.right = newNode(
9
);
root.left.right.left = newNode(
3
);
root.left.right.right = newNode(
1
);
root.right.left.left = newNode(
4
);
root.right.left.right = newNode(
2
);
root.right.right.left = newNode(
7
);
root.right.right.right = newNode(
2
);
root.left.right.left.left = newNode(
16
);
root.left.right.left.right = newNode(
17
);
root.right.left.right.left = newNode(
18
);
root.right.right.left.right = newNode(
19
);
modifiedLevelOrder(root);
}
}