JZ59 --- 按之字顺序打印二叉树

题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

题解:
由题意知,需要按S形打印二叉树,实则为层序遍历只是奇数层正序打印,偶数层逆序打印。
(1)设置一个布尔型的变量flag,奇数层置为true,偶数层置为false。
(2)打印时判断flag,来决定如何打印。

public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    ArrayList<ArrayList<Integer>> res = new ArrayList<> ();
    if(pRoot == null){
        return res;
    }
    Queue<TreeNode> queue = new LinkedList<> ();
    queue.offer (pRoot);
    // true就从左到右遍历,false就从右到左遍历
    boolean flag = true;
    while(!queue.isEmpty ()){
        ArrayList<Integer> list = new ArrayList<> ();
        int size = queue.size ();
        for(int i = 0;i < size;i++) {
            TreeNode node = queue.poll ();
            if(node == null){
                continue;
            }
            if(flag){
                list.add (node.val);
            }else{
                list.add (0,node.val); // 逆序放置
            }
            queue.offer (node.left);
            queue.offer (node.right);
        }
        flag = !flag;
        if(list.size () > 0){
            res.add (list);
        }
    }
    return res;
}

你可能感兴趣的:(剑指offer)