// 非遞歸後序遍歷
public static void postorderTraversal(TreeNode root) {
Stack<TreeNode> treeNodeStack = new Stack<TreeNode>();
TreeNode node = root;
TreeNode lastVisit = root;//設置遊標判斷右子樹
while (node != null || !treeNodeStack.isEmpty()) {//如果節點不爲空且棧不爲空
while (node != null) {//如果節點不爲空
treeNodeStack.push(node);//將節點入棧
node = node.left;//先看左子樹
}
node = treeNodeStack.peek();//查看棧頂元素
//如果其右子樹也爲空,或者右子樹已經訪問
//則可以直接輸出當前節點的值
if (node.right == null || node.right == lastVisit) {
System.out.print(node.val + " ");
treeNodeStack.pop();//出棧
lastVisit = node;//將當前節點設爲遊標
node = null;//節點設爲空
} else {//如果其右子樹不爲空,以及右子樹未訪問
node = node.right; //否則,繼續遍歷右子樹
}
}
}
二叉樹非遞歸後序遍歷(java)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.