我有一个包含以下内容的文本文件:
public static void fromPreOrder(BufferedReader br) throws IOException {
String line = br.readLine();
if (!line.startsWith("*")) {
return;
}
TreeNode fromPreOrderTree = new TreeNode(line);
line = br.readLine();
if (line.startsWith("*"));
fromPreOrderTree.left = new TreeNode(line);
fromPreOrder(br);
}
句子以'1'开头是一个问题。这些行是预先安排的树。我想使用带有方法的缓冲读取器递归生成。 我希望树看起来如下:
let favorites = JSON.parse(localStorage.getItem('favoList'))|| {};
favorites[norrisJoke.id] =norrisJoke.joke
我正在努力制作这种方法,我相信基本情况是新线是答案而不是问题。到目前为止,我有这个:
favorites.length
但它不能按预期工作。
答案 0 :(得分:0)
您没有给出TreeNode
的实现,因此下面的代码未经过测试,但总体结构应该大致正确:
public static void fromPreOrder(BufferedReader br) throws IOException {
String line = br.readLine();
if (line.startsWith("1")) {
// recursive call:
// parse two subtrees from the remaining lines
TreeNode yChild = fromPreOrder(br);
TreeNode nChild = fromPreOrder(br);
// build the parent node from the question and
// the two child nodes
String question = line;
return TreeNode(question, yChild, nChild);
} else {
// base case: return single line
// which contains a fixed decision, without
// further questions
return TreeNode(line);
}
}
这个想法是这样的:你的递归方法应该返回一个TreeNode
。两种可能的树节点是什么?
TreeNode
结构组成。第一种情况是微不足道的。第二种情况需要两次递归调用。第一个调用解析y
- 分支,第二个调用解析n
- 分支。解析完两个分支后,将问题添加到其中,并将它们组合到一个节点中并返回该分支。
答案 1 :(得分:0)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
class TreeNode {
TreeNode left;
TreeNode right;
String text;
}
public class SO {
public static void main(final String... args) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
TreeNode node = readNode(br);
}
}
public static TreeNode readNode(BufferedReader reader) throws IOException {
String text = reader.readLine();
if (text.charAt(0) == '1') {
TreeNode node = new TreeNode();
node.text = text.substring(1);
node.left = readNode(reader);
node.right = readNode(reader);
return node;
} else {
TreeNode node = new TreeNode();
node.text = text;
return node;
}
}
}
对于每个节点,如果以1开头,我们读取它和2个子节点,否则我们只读取当前节点。