leetcode 94. 二叉樹的中序遍歷(Java 二叉樹中序非遞歸遍歷)

leetcode 94. 二叉樹的中序遍歷(Java 二叉樹中序非遞歸遍歷)

很久沒寫算法,一個水題竟然寫了好久

class TreeNode
{
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x)
    {
        val = x;
    }
}

/**
 * 二叉樹非遞歸中序遍歷思路
 * 本質其實是類似於雙指針
 * 一個指向前一個節點,另一個指向正在遍歷的節點
 * 1)若其左孩子不爲空,則將P入棧並將P的左孩子置爲當前的P,然後對當前結點P再進行相同的處理;
 * 2)若其左孩子爲空,則取棧頂元素並進行出棧操作,訪問該棧頂結點,然後將當前的P置爲棧頂結點的右孩子;
 * 3)直到P爲NULL並且棧爲空則遍歷結束。
 */

class Solution
{
    List<Integer> data;
    public List<Integer> inorderTraversal(TreeNode root)
    {
        data=new ArrayList<>();
        Stack<TreeNode> temp=new Stack<>();

        TreeNode treeNode=root;
        while (treeNode!=null||!temp.empty())
        {
            /*
            * 當前節點入棧,treenode指向當前節點的left節點
            */
            while (treeNode!=null)
            {
                temp.push(treeNode);
                treeNode=treeNode.left;
            }

            //
            if (!temp.empty())
            {
                treeNode=temp.pop();
                data.add(treeNode.val);
                treeNode=treeNode.right;
            }

        }
        return data;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章