import
java.lang.Math;
import
java.io.*;
class
GFG {
static
class
Node {
Node left, right;
int
val;
public
Node(
int
val)
{
this
.val = val;
this
.left =
this
.right =
null
;
}
}
public
static
int
minAbsDiff(Node root)
{
int
[] minDiff =
new
int
[
1
];
minDiff[
0
] = Integer.MAX_VALUE;
postOrder(root);
preOrder(root, minDiff);
return
minDiff[
0
];
}
public
static
int
postOrder(Node root)
{
if
(root ==
null
)
return
0
;
root.val += postOrder(root.left)
+ postOrder(root.right);
return
root.val;
}
public
static
void
preOrder(Node root,
int
[] minDiff)
{
if
(root ==
null
)
return
;
int
leftDiff
= Math.abs(root.left.val
- (root.val - root.left.val));
int
rightDiff
= Math.abs(root.right.val
- (root.val - root.right.val));
minDiff[
0
]
= Math.min(minDiff[
0
],
Math.min(leftDiff, rightDiff));
return
;
}
public
static
void
main(String[] args)
{
Node root =
new
Node(
1
);
root.left =
new
Node(
2
);
root.right =
new
Node(
3
);
root.left.left =
new
Node(
4
);
root.left.right =
new
Node(
5
);
root.right.left =
new
Node(
6
);
root.right.right =
new
Node(
7
);
System.out.println(minAbsDiff(root));
}
}