和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

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

原题链接


描述

给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树是{1,2,3,#,#,4,5},该二叉树之字形层序遍历的结果是

[

[1],

[3,2],

[4,5]

]



示例1

输入:{1,2,3,#,#,4,5}
返回值:[[1],[3,2],[4,5]]

示例2

输入:{8,6,10,5,7,9,11}
返回值:[[8],[10,6],[5,7,9,11]]

示例3

输入:{1,2,3,4,5}
返回值:[[1],[3,2],[4,5]]

思路

和层次遍历一样,只是每换一层就需要更换左右遍历的方向。添加一个布尔类型的标记变量每一层结束变成相反值,然后把需要从右像左输出每的元素所在的 arrayList 逆转,通过 Collections 中的方法。


解答

package com.klaus.tree.prob59;

import java.util.*;

public class Solution {
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        if (pRoot == null) return new ArrayList<>();

        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();

        queue.add(pRoot);
        boolean reverse = false;

        while (!queue.isEmpty()) {

            ArrayList<Integer> list = new ArrayList<>();
            int cnt = queue.size();

            while (cnt-- > 0) {
                TreeNode node = queue.remove();
                list.add(node.val);
                if (node.left != null) queue.add(node.left);
                if (node.right != null) queue.add(node.right);
            }

            if (reverse)
                Collections.reverse(list);
            reverse = !reverse;
            res.add(list);
        }

        return res;
    }
}
posted @ 2021-08-01 14:48  klaus08  阅读(34)  评论(0编辑  收藏  举报