0
点赞
收藏
分享

微信扫一扫

CodeTop016 二叉树的锯齿形层序遍历

JakietYu 2022-02-23 阅读 55

二叉树的锯齿形层序遍历
给你二叉树的根节点root,返回其节点值的锯齿形层序遍历(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)
就是一个基本的BFS算法,唯一的区别就是加一个flag用于判断遍历的方向,进行交替性的转换方向. 比较清楚的一点是,在每层遍历的时候直接用一个双端队列

  • 如果是左方向遍历,就将节点加到队尾
  • 如果是右方向遍历,就将节点加到对头

即可实现要求.

public class Solution016 {
    public static void main(String[] args) {
        TreeNode l5 = new TreeNode(7),
                l4 = new TreeNode(15),
                l3 = new TreeNode(20,l4,l5),
                l2 = new TreeNode(9),
                l1 = new TreeNode(3,l2,l3);

        List<List<Integer>> lists = zigzagLevelOrder(l1);
        System.out.println(Arrays.toString(lists.toArray()));
    }

    public static List<List<Integer>> zigzagLevelOrder(TreeNode root){
        List<List<Integer>> ans = new ArrayList<>();
        if (root==null) return ans;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        boolean flag = true;//用于判断遍历的方向
        while (!queue.isEmpty()){
            int size = queue.size();
            Deque<Integer> res = new LinkedList<>();
            for (int i=0;i<size;i++){
                TreeNode node = queue.poll();
                //添加进入list的顺序不同
                if (flag) {
                    res.offerLast(node.val);
                }else{
                    res.offerFirst(node.val);
                }

                if (node.left!=null) queue.add(node.left);
                if (node.right!=null) queue.add(node.right);
            }
            ans.add(new ArrayList<>(res));
            flag = !flag;
        }
        return ans;
    }
}
举报

相关推荐

0 条评论