这两天终于到了树结构的算法了,树结构一直是工作中的重点,也是难点,有点小爬坡的意思,难度自然会有但是掌握了相应的模板也不会变得很难。
一般二叉树的遍历有两种,深度优先、广度优先,广度优先也叫层序遍历,层序遍历有两种:自顶向下遍历和自底向上遍历。
那么下面将介绍我觉得比较不好理解的自顶向下的锯齿形的层序遍历,也就是leetcode的13题,题目如下:
二叉树的层序遍历基本就是建立一个List<List<Integer>> 存储每层的数据,队列Queue<TreeNode> que = new LinkedList<>();来存储每层的节点。那这里的要求是偶数列的要从后往前遍历,那就可以建立一个双端队列奇数列往后插入,偶数列往头插入,再把这个双端队列初始化给新建的list去存储,注意的是这里可以通过一个变量去判断奇数列还是偶数列,这里用布尔型的flag每层遍历完取反就比较巧妙,也可以建立一个count = 1,判断%2是否有余数来判断奇偶,但是后面这个如果这个数是层次是无限大的话,这个count就有可能越界。代码如下: