スタックから要素をポップするときは、要素の右側の子ノードとスタックの最上位の要素が同じであるかどうかを確認します。同じである場合は、左右のサブツリーの走査が完了していることを意味します。今回は、スタックの一番上の要素をポップするだけで済みます。一度出力すると、
void postOrderNonRecursive(BinaryTreeNode root){
LLStack s = new LLStack();
while(true){
if(root != null){
s.push(root);
root = root.getLeft();
}
else{
if(s.isEmpty()){
System.out.println("Stack is empty");
return;
}
else if(s.top().getRight() == null){
root = s.pop();
System.out.println(root.getData());
if(root == s.top().getRight()){
System.out.println(s.top().getData());
s.pop();
}
}
if(s.isEmpty()){
root = s.top().getRight();
}else{
root = null;
}
}
}
s.deleteStack();
}