using
System;
using
System.Collections;
class
GFG{
class
Node
{
public
Node left;
public
Node right;
public
int
data;
};
static
Node newNode(
int
key)
{
Node node =
new
Node();
node.left = node.right =
null
;
node.data = key;
return
node;
}
static
ArrayList path;
static
bool
FindPath(Node root,
int
key)
{
if
(root ==
null
)
return
false
;
path.Add(root.data);
if
(root.data == key)
return
true
;
if
(FindPath(root.left, key) ||
FindPath(root.right, key))
return
true
;
path.Remove((
int
)path[path.Count - 1]);
return
false
;
}
static
int
minMaxNodeInPath(Node root,
int
a,
int
b)
{
path =
new
ArrayList();
bool
flag =
true
;
ArrayList Path2 =
new
ArrayList();
ArrayList Path1 =
new
ArrayList();
int
min1 = Int32.MaxValue;
int
max1 = Int32.MinValue;
int
min2 = Int32.MaxValue;
int
max2 = Int32.MinValue;
int
i = 0;
int
j = 0;
flag = FindPath(root, a);
Path1 = path;
path =
new
ArrayList();
flag &= FindPath(root, b);
Path2 = path;
if
(flag)
{
for
(i = 0; i < Path1.Count &&
i < Path2.Count; i++)
if
((
int
)Path1[i] != (
int
)Path2[i])
break
;
i--;
j = i;
for
(; i < Path1.Count; i++)
{
if
(min1 > (
int
)Path1[i])
min1 = (
int
)Path1[i];
if
(max1 < (
int
)Path1[i])
max1 = (
int
)Path1[i];
}
for
(; j < Path2.Count; j++)
{
if
(min2 > (
int
)Path2[j])
min2 = (
int
)Path2[j];
if
(max2 < (
int
)Path2[j])
max2 = (
int
)Path2[j];
}
Console.Write(
"Min = "
+
Math.Min(min1, min2) +
"\n"
);
Console.Write(
"Max = "
+
Math.Max(max1, max2) +
"\n"
);
}
else
Console.Write(
"Min = -1\nMax = -1"
);
return
0;
}
public
static
void
Main(
string
[]arg)
{
Node root = newNode(20);
root.left = newNode(8);
root.right = newNode(22);
root.left.left = newNode(5);
root.left.right = newNode(3);
root.right.left = newNode(4);
root.right.right = newNode(25);
root.left.right.left = newNode(10);
root.left.right.right = newNode(14);
int
a = 5;
int
b = 14;
minMaxNodeInPath(root, a, b);
}
}