流程:
left子节点(包括其子树)-> 节点 -> right子节点。
非递归形式:
//后序遍历
public static void postOrder(Node root){
Stack stack = new Stack();
Node node = root;
Node prev = node;
while(node != null || stack.size() > 0){
//压入所有左节点
while(node != null){
stack.push(node);
node = node.left;
}
if(stack.size() > 0){
Node temp = stack.peek().right;
//如果右节点是null或者刚访问过
if(temp == null || temp == prev){
node = stack.pop();
System.out.println(node.data);
prev = node;
node = null;
}else{
node = temp;
}
}
}
}