Java Tree Implementation
Welcome to Code Review!


isLeaf compares the Size of children, a solution that is better readable is to use isEmpty() instead of compare the size of children.
The tree avoid a serialization that others may support, add the serializable-interface to keep serialization support.
edgeVal and data have no setter and to add final would help to avoid sideeffects whenever the code changes.
To have a ArrayList as a list of children has the problem that 


The ArrayList can contain null
The ArrayList can contain one element twice (i do not think its a case you like to have)


You better use some kind of set, a LinkedHashSet in example.
You can use getChildren() to have read-write-access to the children, if you do oscar.getChildren().add(oscar); your loop is perfect but not a Tree. Use the unmodifyable-functions of the class Collections to return a readonly-collection.
The class is named Tree that can contains a list of Tree. Even if a Tree can be a parasite to other Trees i propose to name the Class TreeNode.
toString should describe the node, not the data inside.
Am i the only one who write javadoc?