List<String> attributeNames, ConstantDecisonTree defaultTree) {
if (ds.size() == 0) {
return defaultTree;
}
if (allExamplesHaveSameClassification(ds)) {
return new ConstantDecisonTree(ds.getExample(0).targetValue());
}
if (attributeNames.size() == 0) {
return majorityValue(ds);
}
String chosenAttribute = chooseAttribute(ds, attributeNames);
DecisionTree tree = new DecisionTree(chosenAttribute);
ConstantDecisonTree m = majorityValue(ds);
List<String> values = ds.getPossibleAttributeValues(chosenAttribute);
for (String v : values) {
DataSet filtered = ds.matchingDataSet(chosenAttribute, v);
List<String> newAttribs = Util.removeFrom(attributeNames,