import
java.util.LinkedList;
import
java.util.Queue;
class
Node {
int
data;
Node left, right;
Node(
int
item) {
data = item;
left = right =
null
;
}
}
public
class
BinaryTreeDifference {
static
int
absoluteDifference(Node root1, Node root2) {
if
(root1 ==
null
|| root2 ==
null
) {
return
-
1
;
}
int
sum1 =
0
;
int
sum2 =
0
;
Queue<Node> q1 =
new
LinkedList<>();
Queue<Node> q2 =
new
LinkedList<>();
q1.add(root1);
q2.add(root2);
while
(!q1.isEmpty() || !q2.isEmpty()) {
int
size1 = q1.size();
int
size2 = q2.size();
while
(size1-- >
0
) {
Node curr = q1.poll();
if
(size1 ==
0
) {
sum1 += curr.data;
}
if
(curr.left !=
null
) {
q1.add(curr.left);
}
if
(curr.right !=
null
) {
q1.add(curr.right);
}
}
while
(size2-- >
0
) {
Node curr = q2.poll();
if
(size2 ==
0
) {
sum2 += curr.data;
}
if
(curr.left !=
null
) {
q2.add(curr.left);
}
if
(curr.right !=
null
) {
q2.add(curr.right);
}
}
}
return
Math.abs(sum1 - sum2);
}
public
static
void
main(String[] args) {
Node root1 =
new
Node(
10
);
root1.left =
new
Node(
5
);
root1.right =
new
Node(
20
);
root1.left.left =
new
Node(
4
);
root1.left.right =
new
Node(
7
);
root1.right.right =
new
Node(
30
);
Node root2 =
new
Node(
50
);
root2.left =
new
Node(
25
);
root2.right =
new
Node(
60
);
root2.left.left =
new
Node(
20
);
root2.left.right =
new
Node(
30
);
root2.right.left =
new
Node(
55
);
root2.right.right =
new
Node(
70
);
int
diff = absoluteDifference(root1, root2);
System.out.println(
"Absolute Difference of Right View Sums: "
+ diff);
}
}