Обычно лучше иметь один оператор возврата, чем иметь несколько операторов возврата.Ваш код не посещает правильные узлы, потому что вы возвращаетесь до того, как этот код будет достигнут.Примерно так будет посещать каждый узел.Возможно, вам придется немного поиграть с форматированием результатов.
public String createKey(Node node,String s){
if(node.right == null && node.left == null) {
hashMap.put(node, s);
s="";
}
if (node.left != null)
s += createKey(node.left, s + "0");
if(node.right != null)
s += createKey(node.right, s + "1");
return s;
}
Примерно так же будет работать и, возможно, будет проще форматировать результаты:
public String createKey(Node node,String s){
if(node.right == null && node.left == null) {
hashMap.put(node, s);
s="";
}
else if (node.left != null && node.right != null)
s = createKey(node.left, s + "0") + " " + createKey(node.right, s + "1");
else if (node.left != null)
s = createKey(node.left, s + "0");
else if(node.right != null)
s = createKey(node.right, s + "1");
return s;
}