using
System;
class
TreeNode {
public
int
val;
public
TreeNode left, right;
public
TreeNode(
int
val)
{
this
.val = val;
this
.left =
null
;
this
.right =
null
;
}
}
public
class
GFG {
static
TreeNode newNode(
int
data)
{
TreeNode temp =
new
TreeNode(data);
return
temp;
}
static
TreeNode insert(TreeNode root,
int
val)
{
TreeNode newnode = newNode(val);
TreeNode x = root;
TreeNode y =
null
;
while
(x !=
null
) {
y = x;
if
(val < x.val)
x = x.left;
else
x = x.right;
}
if
(y ==
null
)
y = newnode;
else
if
(val < y.val)
y.left = newnode;
else
y.right = newnode;
return
y;
}
static
void
findMaxDiff(TreeNode root,
int
[] max_diff)
{
if
(root ==
null
) {
return
;
}
int
lval, rval;
if
(root.left !=
null
&& root.right !=
null
) {
lval = root.left.val;
rval = root.right.val;
max_diff[0]
= Math.Max(max_diff[0], rval - lval);
}
findMaxDiff(root.left, max_diff);
findMaxDiff(root.right, max_diff);
}
static
public
void
Main()
{
TreeNode root =
null
;
TreeNode root2 =
null
;
root = insert(root, 100);
insert(root, 50);
insert(root, 105);
insert(root, 75);
insert(root, 5);
insert(root, 101);
insert(root, 106);
root2 = insert(root2, 100);
insert(root2, 60);
insert(root2, 120);
insert(root2, 45);
insert(root2, 90);
insert(root2, 110);
insert(root2, 160);
int
[] max_diff = { Int32.MinValue };
int
[] max_diff2 = { Int32.MinValue };
findMaxDiff(root, max_diff);
Console.WriteLine(max_diff[0]);
findMaxDiff(root2, max_diff2);
Console.WriteLine(max_diff2[0]);
}
}