import
java.util.ArrayList;
import
java.util.List;
class
Node {
int
val;
Node left, right;
Node(
int
val) {
this
.val = val;
this
.left =
this
.right =
null
;
}
}
public
class
GFG {
static
Node node =
null
;
static
void
findParent(Node root, Node p, List<Node> parent,
int
start) {
if
(root ==
null
)
return
;
parent.set(root.val, p);
if
(root.val == start) {
node = root;
}
findParent(root.left, root, parent, start);
findParent(root.right, root, parent, start);
}
static
int
amountOfTime(Node root,
int
start) {
List<Node> parent =
new
ArrayList<>();
for
(
int
i =
0
; i <
100005
; i++) {
parent.add(
null
);
}
findParent(root,
null
, parent, start);
boolean
[] visited =
new
boolean
[
100005
];
int
[] result = {
0
};
dfs(node,
0
, visited, parent, result);
return
result[
0
];
}
static
void
dfs(Node curr,
int
dist,
boolean
[] visited, List<Node> parent,
int
[] result) {
visited[curr.val] =
true
;
result[
0
] = Math.max(result[
0
], dist);
for
(Node child :
new
Node[] { curr.left, curr.right, parent.get(curr.val) }) {
if
(child !=
null
&& !visited[child.val]) {
dfs(child, dist +
1
, visited, parent, result);
}
}
}
public
static
void
main(String[] args) {
Node root =
new
Node(
10
);
root.left =
new
Node(
12
);
root.right =
new
Node(
13
);
root.right.left =
new
Node(
14
);
root.right.right =
new
Node(
15
);
root.right.left.left =
new
Node(
21
);
root.right.left.right =
new
Node(
22
);
root.right.right.left =
new
Node(
23
);
root.right.right.right =
new
Node(
24
);
int
start =
14
;
int
result = amountOfTime(root, start);
System.out.println(result);
}
}