Я кодирую дерево кодирования huffman, и я получаю сообщение об ошибке.StackOverFlow Ошибка/нерегулярная рекурсия
5:1
5:4
5:2
5:1
5:4
5:2
5:1
5:4
5:2
5:1
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeLoop(SingleByteEncoder.java:130)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.PrintStream.write(PrintStream.java:476)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at HuffmanNode.buildTree(hw4.java:65)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
Очевидно, что у меня есть бесконечный метод recusive при buildTree(). Однако я не понимаю, что он делает.
public void buildTree(HuffmanNode node){
if (node.compareTo(this) <= 0 && left != null){
System.out.println(node.getCount() + ":" + this.count);
left.buildTree(node);
}
else if (node.compareTo(this) <= 0 && left == null){
this.left = node;
node.parent = this;
}
else if (node.compareTo(this) > 0 && right != null){
System.out.println(node.getCount() + ":" +this.count);
right.buildTree(node);
}
else if (node.compareTo(this) > 0 && right == null){
this.right = node;
node.parent = this;
}
}
Мой полный код и входной файл можно увидеть Here
Любое понимание будет высоко оценена, как я был на это некоторое время, и я очень разочарован.
обновляемые так Pastebin код строки соответствие ошибки – user1093111
Есть ли у вас условие остановки в вашей рекурсивной функции? –
ну, он должен был быть на 156 - 160. Если он получил значение root, тогда root = результат, а затем я бы использовал root.genCode() для печати двоичного файла. Но моя логика может быть неправильной. – user1093111