private void incrementChild(Node root,int increment){
        if(root == null || (root.left ==null && root.right == null)){
            return;
        }
        if(root.left != null){
            root.left.data = root.left.data + increment;
            incrementChild(root.left,increment);
        }else{
            root.right.data = root.right.data + increment;
            incrementChild(root.right,increment);
        }
    }
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