我試圖從文本文件創建決策樹。從文本文件寫入決策樹
public static BTNode<String> fileToTree (String fileName) throws IOException {
BufferedReader file = new BufferedReader(new FileReader(fileName));
BTNode<String> node = new BTNode("", null, null);
BTNode<String> answer = fileToTreeHelper(node, file);
file.close();
return answer;
}
public static BTNode<String> fileToTreeHelper (BTNode<String> node, Scanner fileScanner) throws IOException {
String line;
if(node == null){
node = new BTNode<String>(fileScanner.nextLine(), null, null);
fileToTreeHelper(node, fileScanner);
}else{
if(fileScanner.hasNext()){
if(node.isLeaf()){
node.setData(fileScanner.nextLine());
}
if(node.getLeft() == null) {
line = fileScanner.nextLine();
if(line.contains("?")) {
node.setLeft(new BTNode<String>(line, null, null));
}
if(line.contains(";")) {
node.setLeft(new BTNode<>(line,null, null));
node.setRight(new BTNode<>(fileScanner.nextLine(),null, null));
}
}
if(node.getRight() == null) {
line = fileScanner.nextLine();
if(line.contains("?")) {
node.setRight(new BTNode<String>(line, null, null));
}
if(line.contains(";")) {
node.getLeft().setLeft(new BTNode<>(line,null, null));
node.getLeft().setRight(new BTNode<>(fileScanner.nextLine(),null, null));
node.setRight(new BTNode<String>(line, null, null));
fileToTreeHelper(node.getRight(), fileScanner);
}
}
}
}
return node;
}
這是我到目前爲止;當我運行它決策樹應該是這個樣子:
Are you a mammal?
Are you bigger than a cat?
Kangaroo;
Mouse;
Do you live underwater?
Trout;
Robin;
但到目前爲止,所有我得到是這樣的:
Are you a mammal?
Are you bigger than a cat?
Kangaroo;
--
--
如何做到這一點任何幫助嗎?我知道我需要遞歸調用這個函數,但是這不太好。有任何想法嗎?
節點看起來像3個構造函數是什麼。另外我認爲每個問題都可能導致只有2個答案或問題? – LudgerP
@路德耶是的每個問題只能有兩個答案。構造函數用於創建節點 – Daniel