1,问题简述
给定一个二叉树,返回其节点值的锯齿形层次遍历。
(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
2,示例
例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]
3,题解思路
队列的使用
4,题解程序
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class ZigzagLevelOrderTest { public static void main(String[] args) { TreeNode t1 = new TreeNode(3); TreeNode t2 = new TreeNode(9); TreeNode t3 = new TreeNode(20); TreeNode t4 = new TreeNode(15); TreeNode t5 = new TreeNode(7); t1.left = t2; t1.right = t3; t3.left = t4; t3.right = t5; List> listList = zigzagLevelOrder(t1); System.out.println("listList = " + listList); } public static List> zigzagLevelOrder(TreeNode root) { List> listList = new ArrayList<>(); if (root == null) { return listList; } LinkedListqueue = new LinkedList<>(); boolean flag = true; queue.add(root); while (!queue.isEmpty()) { int size = queue.size(); Listlist = new ArrayList<>(); if (flag) { while (size-- > 0) { TreeNode node = queue.pollFirst(); list.add(node.val); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } } else { while (size-- > 0) { TreeNode node = queue.pollLast(); list.add(node.val); if (node.right != null) { queue.push(node.right); } if (node.left != null) { queue.push(node.left); } } } flag = !flag; listList.add(list); } return listList; }}
5,题解程序图片版
6,总结
写了一年的文章了,整体输出文章内容基本上都是以java为主,大概篇幅内容都是围绕着数据库,JDK源码,mybatis,spring,springboot的框架来进行输出的,一年有所成长,有所失去,快到十一了,去年也是十一的时候开始了文章输出的,一年的时间过得好快啊