1. 程式人生 > >(劍指offer)按之字形順序列印二叉樹

(劍指offer)按之字形順序列印二叉樹

時間限制:1秒 空間限制:32768K 熱度指數:124380

題目描述
請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

思路
BFS。每次取出佇列中所有節點,也就是樹的一層

import java.util.ArrayList;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.*; public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { //BFS ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>(); if(pRoot == null){ return listAll; }
ArrayDeque<TreeNode> que = new ArrayDeque<TreeNode>(); boolean flag = true;//用來標記奇數行和偶數行 que.add(pRoot); while(que.isEmpty() == false){ int size = que.size(); ArrayList<Integer> list = new ArrayList<Integer>(); for
(int i = 0; i < size; i++){ TreeNode node = que.remove(); if(flag){ list.add(node.val); }else{ list.add(0, node.val); } if(node.left != null){ que.add(node.left); } if(node.right != null){ que.add(node.right); } } listAll.add(list); flag = !flag; } return listAll; } }