class
GFG {
static
class
Node {
int
data;
Node left, right;
public
Node(
int
key)
{
data = key;
left = right =
null
;
}
};
static
int
l =
0
, r =
0
, N;
static
void
Bottom(Node root,
int
arr[],
int
arr2[],
int
x,
int
p,
int
mid)
{
if
(root ==
null
)
return
;
if
(x < l)
l = x;
if
(x > r)
r = x;
if
(arr[mid + x] == Integer.MIN_VALUE) {
arr[mid + x] = root.data;
arr2[mid + x] = p;
}
else
if
(arr2[mid + x] < p) {
arr[mid + x] = root.data;
arr2[mid + x] = p;
}
Bottom(root.right, arr, arr2, x +
1
, p +
1
, mid);
Bottom(root.left, arr, arr2, x -
1
, p +
1
, mid);
}
static
void
bottomView(Node root)
{
int
[] arr =
new
int
[
2
* N +
1
];
int
[] arr2 =
new
int
[
2
* N +
1
];
for
(
int
i =
0
; i <
2
* N +
1
; i++) {
arr[i] = Integer.MIN_VALUE;
arr2[i] = Integer.MIN_VALUE;
}
int
mid = N, x =
0
, p =
0
;
Bottom(root, arr, arr2, x, p, mid);
for
(
int
i = mid + l; i <= mid + r; i++)
System.out.print(arr[i] +
" "
);
}
public
static
void
main(String[] args)
{
N =
5
;
Node root =
new
Node(
1
);
root.right =
new
Node(
2
);
root.right.right =
new
Node(
4
);
root.right.right.left =
new
Node(
3
);
root.right.right.right =
new
Node(
5
);
bottomView(root);
}
}