二叉樹後序遍歷非遞迴實現(java)
阿新 • • 發佈:2018-11-09
後序遍歷:雙棧法,和層次遍歷(雙佇列)很相似,唯一區別在於層次遍歷用的 是佇列,後序遍歷用的是棧。
public static void posOrderUnRecur1(Node head){ System.out.print("PosOrder:"); if(head != null){ Stack<Node> s1 = new Stack<Node>(); Stack<Node> s2 = new Stack<Node>(); si.push(head); while(!s1.isEmpty()){ head = s1.pop(); s2.push(head); if(head.left != null){ s1.push(head.left); } if(head.right != null){ s1.push(head.right); } } while(!s2.isEmpty()){ System.out.print(s2.pop().value + " "); } } System.out,println(); } public static void posOrderUnRecur2(Node h){ Sytem.out.print("PosOrder:"); if(h != null){ Stack<Node> stack = new Stack<Node>(); stack.push(h); Node c = null; while(!stack.isEmpty()){ c = stack.peek(); if(c.left != null && h != c.left && h != c.right){ stack.push(c.left); }else if(c.right != null && h != c.right){ stack.push(c.right); }else{ System.out.print(stack.pop().value + " "); h = c; } } } System.out.println(); }