package tree;
import java.util.Stack;
public class IterativePostorderTraversal {
/**
* 用一个栈实现二叉树的非递归后序遍历
* @param args
*/
public static void printpost(TreeNode root){
Stack<TreeNode> stack1 = new Stack<>();
Stack<Boolean> stack2 = new Stack<>();
while(root!=null||!stack1.isEmpty()){
while(root!=null){
stack1.push(root);
stack2.push(false);
root = root.left;
}
TreeNode node = stack1.pop();
if(!stack2.pop()){
stack1.push(node);
stack2.push(true);
root = node.right;
}else{
System.out.print(node.value+" ");
}
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
printpost(root);
}
}