LeetCode&&劍指offer 面試題32 - III. 從上到下打印二叉樹 III 我的解題記錄

題目
在這裏插入圖片描述
當需要從左到右時,我們需要轉爲棧來使用
當需要從右到左,我們需要轉爲隊列來使用
所以我們可以利用LinkedList

    public List<List<Integer>> levelOrder(TreeNode root) {
        LinkedList<TreeNode> linkedList = new LinkedList<>();
        List<List<Integer>> out = new ArrayList<>();
        if (root==null)
            return out;
        linkedList.add(root);
        boolean flag = true; //true表示從左到右 false表示從右到左
        while (!linkedList.isEmpty()){
            int size = linkedList.size();
            List<Integer> list = new ArrayList<>();
            while (size>0){
                if (flag){   //如果爲左到右 那麼我們要取最後的結點 先把該結點的左結點添加到最前面 然後把該結點的右節點添加到最前面 此時爲棧
                    TreeNode node = linkedList.pollLast();
                    if (node.left!=null)
                        linkedList.addFirst(node.left);
                    if (node.right!=null)
                        linkedList.addFirst(node.right);
                    list.add(node.val);
                }else { //如果爲右到左 那麼我們要取最前的結點 先把該結點的右結點添加到最後面 然後把該結點的左節點添加到最後面 此時爲隊列
                    TreeNode node = linkedList.pollFirst();
                    if (node.right!=null)
                        linkedList.addLast(node.right);
                    if (node.left!=null)
                        linkedList.addLast(node.left);
                    list.add(node.val);
                }
                size--;
            }
            flag = !flag;   //下一次的順序與本次相反
            out.add(list);
        }
        return out;
    }

在這裏插入圖片描述
代碼可能看起來有點多 但是我覺得邏輯還蠻清晰 貼出來分享一下

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