/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone{
public static class Node{
Node left, right;
int data;
Node(int data, Node left, Node right){
this.data = data;
this.left = left;
this.right = right;
}
Node(int data){
this(data, null, null);
}
}
public static int depthSum(Node root) {
Queue<Node> q = new LinkedList<Node>();
q.add(root);
int siblings = 1;
int totalSum = 0, levelSum = 0, level = 0;
while(!q.isEmpty()) {
Node n = q.remove();
levelSum += n.data;
if(n.left != null) // Add left child
q.add(n.left);
if(n.right != null) // Add right child
q.add(n.right);
if(--siblings == 0){ // All siblings have been probed
siblings = q.size(); // Children become siblings
totalSum += levelSum * level; // increment totalSum
level++; // increment level
levelSum = 0; // reinitialize levelSum
}
}
return totalSum;
}
Node root = new Node(1,
new Node(2,
null,
new Node(5)
),
new Node(3,
new Node(6),
new Node(7)
)
);
System.
out.
println("Expected Answer : (1)*0 + (2 + 3)*1 + (5 + 6 + 7)*2 = 41"); System.
out.
println("Actual Answer : " + depthSum
(root
)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lewoJcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlewoJCU5vZGUgbGVmdCwgcmlnaHQ7CgkJaW50IGRhdGE7CgkJTm9kZShpbnQgZGF0YSwgTm9kZSBsZWZ0LCBOb2RlIHJpZ2h0KXsKCQkJdGhpcy5kYXRhID0gZGF0YTsKCQkJdGhpcy5sZWZ0ID0gbGVmdDsKCQkJdGhpcy5yaWdodCA9IHJpZ2h0OwoJCX0KCQlOb2RlKGludCBkYXRhKXsKCQkJdGhpcyhkYXRhLCBudWxsLCBudWxsKTsKCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgaW50IGRlcHRoU3VtKE5vZGUgcm9vdCkgewoJICAgIFF1ZXVlPE5vZGU+IHEgPSBuZXcgTGlua2VkTGlzdDxOb2RlPigpOwoJICAgIHEuYWRkKHJvb3QpOwoJICAgIGludCBzaWJsaW5ncyA9IDE7CgkgICAgaW50IHRvdGFsU3VtID0gMCwgbGV2ZWxTdW0gPSAwLCBsZXZlbCA9IDA7CgkKCSAgICB3aGlsZSghcS5pc0VtcHR5KCkpIHsKCSAgICAgICAgTm9kZSBuID0gcS5yZW1vdmUoKTsKCSAgICAgICAgbGV2ZWxTdW0gKz0gbi5kYXRhOwoJCgkgICAgICAgIGlmKG4ubGVmdCAhPSBudWxsKSAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBsZWZ0IGNoaWxkIAoJICAgICAgICAgICAgcS5hZGQobi5sZWZ0KTsKCQoJICAgICAgICBpZihuLnJpZ2h0ICE9IG51bGwpICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcmlnaHQgY2hpbGQKCSAgICAgICAgICAgIHEuYWRkKG4ucmlnaHQpOwoJCgkgICAgICAgIGlmKC0tc2libGluZ3MgPT0gMCl7ICAgICAgICAgICAgICAgICAgIC8vIEFsbCBzaWJsaW5ncyBoYXZlIGJlZW4gcHJvYmVkCgkgICAgICAgICAgICBzaWJsaW5ncyA9IHEuc2l6ZSgpOyAgICAgICAgICAgICAgIC8vIENoaWxkcmVuIGJlY29tZSBzaWJsaW5ncwoJICAgICAgICAgICAgdG90YWxTdW0gKz0gbGV2ZWxTdW0gKiBsZXZlbDsgICAgICAvLyBpbmNyZW1lbnQgdG90YWxTdW0KCSAgICAgICAgICAgIGxldmVsKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IGxldmVsCgkgICAgICAgICAgICBsZXZlbFN1bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlaW5pdGlhbGl6ZSBsZXZlbFN1bQoJICAgICAgICB9CgkgICAgfQoJCgkgICAgcmV0dXJuIHRvdGFsU3VtOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb257CgkJTm9kZSByb290ID0gbmV3IE5vZGUoMSwKCQkJCQkJbmV3IE5vZGUoMiwKCQkJCQkJCW51bGwsCgkJCQkJCQluZXcgTm9kZSg1KQoJCQkJCQkpLCAKCQkJCQkJbmV3IE5vZGUoMywKCQkJCQkJCW5ldyBOb2RlKDYpLAoJCQkJCQkJbmV3IE5vZGUoNykKCQkJCQkJKQoJCQkJCSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBBbnN3ZXIgOiAoMSkqMCArICgyICsgMykqMSArICg1ICsgNiArIDcpKjIgPSA0MSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQWN0dWFsIEFuc3dlciAgIDogIiArIGRlcHRoU3VtKHJvb3QpKTsKCX0KfQ==