我正在研究一个表达式树项目,该项目接受用户的后缀表达式(即7 8 +)并将其存储在表达式树中;然后,程序应以典型的树格式打印树,并向用户显示打印中缀,前缀或后缀格式的选项。
截至目前,似乎我的树正在被正确实例化,但每次我尝试打印它时,格式稍微关闭,每个操作符/操作数都是重复的。所以,如果输出看起来像
-
6 5
最终看起来像
- -
6 5 6 5
最重要的是,每当我尝试打印出一个中缀/前缀/后缀格式时,我会遇到几个空指针异常 - 以及我编写代码的方式,我不知道这是怎么回事。 / p>
打印树的主要方法如下:
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;
}
预订和后序的方法几乎相同,它们只是改变结果的顺序+ = root.getElement()+“”;
我尝试过以各种方式重新格式化这些方法,但每次我最终都会遇到相同的错误。我知道整棵树都不是空的,但我错过了什么?
非常感谢任何帮助。