現在、ユーザーから後置式 (つまり、7 8 +) を受け取り、それを式ツリーに格納する式ツリー プロジェクトに取り組んでいます。次に、プログラムはツリーを典型的なツリー形式で出力し、ユーザーに中置、接頭辞、または後置形式を出力するオプションを提示する必要があります。
今のところ、私のツリーは適切にインスタンス化されているようですが、印刷しようとするたびにフォーマットが少しずれており、各演算子/オペランドが重複しています。したがって、出力が次のようになる場合
-
6 5
それは次のようになります
- -
6 5 6 5
その上、インフィックス/プレフィックス/ポストフィックス形式を出力しようとするたびに、いくつかのヌル ポインター例外に遭遇します。
ツリーを印刷する主な方法は次のとおりです。
public String toString() {
String result = "";
int printDepth = getHeight();
int possibleNodes = (int)Math.pow(2, printDepth+1);
int countNodes = 0;
UnorderedListADT<BTNode<ExpressionTreeNode>> nodes = new UnorderedList<BTNode<ExpressionTreeNode>>();
UnorderedListADT<Integer> levelList = new UnorderedList<Integer>();
BTNode<ExpressionTreeNode> current;
nodes.addToRear(root);
Integer currentLevel = 0;
Integer previousLevel = -1;
levelList.addToRear(currentLevel);
while(countNodes < possibleNodes) {
countNodes += 1;
current = nodes.removeFirst();
currentLevel = levelList.removeFirst();
if(currentLevel>previousLevel) {
result += "\n\n";
previousLevel = currentLevel;
for(int a=0;a<((Math.pow(2, (printDepth-currentLevel+1))-1));a++) {
result += " ";
}
}
if(current!=null) {
result += (current.getElement()).toString()+" ";
nodes.addToRear(current.getLeft());
levelList.addToRear(currentLevel+1);
nodes.addToRear(current.getRight());
levelList.addToRear(currentLevel+1);
}
else {
nodes.addToRear(null);
levelList.addToRear(currentLevel+1);
nodes.addToRear(null);
levelList.addToRear(currentLevel+1);
result += " ";
}
}
return result;
}
ツリーを他のさまざまな形式で印刷する方法...
public String printInorder() {
String result = "";
if(getLeft()!=null)
getLeft().printInorder();
result+= root.getElement()+" ";
if(getRight()!=null)//one null pointer occurs here
getRight().printInorder();//another occurs here
return result;
}
preorder と postorder のメソッドはほとんど同じで、result+=root.getElement()+" "; の順序を変更するだけです。
これらのメソッドをあらゆる方法で再フォーマットしようとしましたが、毎回同じエラーが発生します。ツリー全体がnullではないことはわかっていますが、何が欠けていますか?
どんな助けでも大歓迎です。