/* * 题目:二叉树的交叉遍历(给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行。)) *例如: 给定二叉树 [3,9,20,null,null,15,7], * 3 / \ 9 20 / \ 15 7 输出: * [ [3], [20,9], [15,7] ] *算法:广度优先遍历加层数判断,如果层数为奇数层,就从左往右遍历,如果层数为偶数层,就从右往左遍历。使用双端队列进行实现 * */ package cn.wanggeng.stack; import cn.wanggeng.TreeNode; import java.util.Deque; import java.util.LinkedList; import java.util.List; public class ZigzagLevelOrder { public List<List<Integer>> zigzagLevelOrder(TreeNode root){ List<List<Integer>> list = new LinkedList<List<Integer>>(); Deque<TreeNode> stack = new LinkedList<TreeNode>(); if(root == null){ return list; } stack.offer(root); boolean isOrderLeft = true; while(!stack.isEmpty()){ Deque<Integer> temp = new LinkedList<Integer>(); int size = stack.size(); for(int i = 0; i < size; i++){ TreeNode curNode = stack.poll(); if(isOrderLeft){ temp.offerLast(curNode.val); }else{ temp.offerFirst(curNode.val); } if(curNode.left != null){ stack.offer(curNode.left); } if(curNode.right != null){ stack.offer(curNode.right); } } list.add(new LinkedList<Integer>(temp)); isOrderLeft = !isOrderLeft; } return list; } }
leetcode---二叉树的交叉打印
最新推荐文章于 2021-11-01 13:41:45 发布