二叉樹非遞歸後序遍歷(java)

// 非遞歸後序遍歷
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; //否則,繼續遍歷右子樹
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章