二叉樹的先序,中序遍歷的非遞歸遍歷方法比較簡單,只要藉助一個棧就可以很容易實現。但其後序遍歷就有些複雜了,這裏借鑑下面這篇文章中的後序非遞歸遍歷算法。
利用兩個棧來實現後序遍歷,一個棧用於存儲遍歷結果,另一個棧作爲一個輔助棧。
/*二叉樹後序非遞歸遍歷
* 藉助兩個棧可以用很簡單的方式實現二叉樹的後序非遞歸遍歷
* */
public static void postOrder(TreeNode root){
if (root == null){
return;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
Stack<TreeNode> output = new Stack<TreeNode>();
TreeNode p = root;
while (p != null || !stack.isEmpty()){
if (p != null){
stack.push(p);
output.push(p);
p = p.right;
}else{
p = stack.pop();
p = p.left;
}
}
while (!output.isEmpty()){
System.out.println(output.pop().val + " ");
}
}
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x){
this.val = x;
}
}