public static void main(String args[]){
        ArbitaryTreeToChildSumTree att = new ArbitaryTreeToChildSumTree();
        BinaryTree bt = new BinaryTree();
        Node head = null;
        head = bt.addNode(10, head);
        head = bt.addNode(15, head);
        head = bt.addNode(5, head);
        head = bt.addNode(7, head);
        head = bt.addNode(19, head);
        head = bt.addNode(20, head);
        head = bt.addNode(-1, head);
        att.childSumTree(head);
        TreeTraversals tt = new TreeTraversals();
        tt.inOrder(head);
    }
http://www.geeksforgeeks.org/convert-an-arbitrary-binary-tree-to-a-tree-that-holds-children-sum-property/
Only operation you can do is increase data on the node. No decrement of data
Test case
Root greater than children
Root less than children
Root equal to children
src/com/interview/tree/ArbitaryTreeToChildSumTree.java