- /* 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==