import
java.util.LinkedList;
public
class
Tree1 {
public
static
void
main(String[] args)
{
Tree1.Node root =
new
Tree1.Node(
1
);
Tree1.Node temp =
null
;
temp =
new
Tree1.Node(
2
);
root.left = temp;
temp =
new
Tree1.Node(
3
);
root.right = temp;
temp =
new
Tree1.Node(
4
);
root.left.left = temp;
temp =
new
Tree1.Node(
5
);
root.left.right = temp;
temp =
new
Tree1.Node(
6
);
root.right.left = temp;
temp =
new
Tree1.Node(
7
);
root.right.right = temp;
temp =
new
Tree1.Node(
8
);
root.left.left.left = temp;
temp =
new
Tree1.Node(
9
);
root.left.left.right = temp;
temp =
new
Tree1.Node(
10
);
root.left.right.left = temp;
temp =
new
Tree1.Node(
11
);
root.left.right.right = temp;
temp =
new
Tree1.Node(
12
);
root.right.left.left = temp;
temp =
new
Tree1.Node(
13
);
root.right.left.right = temp;
temp =
new
Tree1.Node(
14
);
root.right.right.left = temp;
temp =
new
Tree1.Node(
15
);
root.right.right.right = temp;
printBinaryTree(root);
}
public
static
class
Node {
public
Node(
int
data) {
this
.data = data; }
int
data;
Node left;
Node right;
}
public
static
void
printBinaryTree(Node root)
{
LinkedList<Node> treeLevel =
new
LinkedList<Node>();
treeLevel.add(root);
LinkedList<Node> temp =
new
LinkedList<Node>();
int
counter =
0
;
int
height = heightOfTree(root) -
1
;
double
numberOfElements
= (Math.pow(
2
, (height +
1
)) -
1
);
while
(counter <= height) {
Node removed = treeLevel.removeFirst();
if
(temp.isEmpty()) {
printSpace(numberOfElements
/ Math.pow(
2
, counter +
1
),
removed);
}
else
{
printSpace(numberOfElements
/ Math.pow(
2
, counter),
removed);
}
if
(removed ==
null
) {
temp.add(
null
);
temp.add(
null
);
}
else
{
temp.add(removed.left);
temp.add(removed.right);
}
if
(treeLevel.isEmpty()) {
System.out.println(
""
);
System.out.println(
""
);
treeLevel = temp;
temp =
new
LinkedList<>();
counter++;
}
}
}
public
static
void
printSpace(
double
n, Node removed)
{
for
(; n >
0
; n--) {
System.out.print(
"\t"
);
}
if
(removed ==
null
) {
System.out.print(
" "
);
}
else
{
System.out.print(removed.data);
}
}
public
static
int
heightOfTree(Node root)
{
if
(root ==
null
) {
return
0
;
}
return
1
+ Math.max(heightOfTree(root.left),
heightOfTree(root.right));
}
}