马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目次
标题形貌:
代码:
这个与二叉树的层序遍历有点类似
标题形貌:
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左举行下一层遍历,以此类推,层与层之间瓜代举行)。
示例 1:
- <strong>输入:</strong>root = [3,9,20,null,null,15,7]
- <strong>输出:</strong>[[3],[20,9],[15,7]]
复制代码 示例 2:
- <strong>输入:</strong>root = [1]
- <strong>输出:</strong>[[1]]
复制代码 示例 3:
- <strong>输入:</strong>root = []
- <strong>输出:</strong>[]
复制代码 代码:
- public List<List<Integer>> zigzaLevelOrder(TreeNode root) {
- List<List<Integer>> res = new ArrayList<>();
- if (root == null) return res;
- LinkedListQueue<TreeNode> queue = new LinkedListQueue<TreeNode>();//单向环形哨兵链表
- queue.offer(root);
- int c1 = 1;//当前的节点数
- boolean odd = true;//奇数层
- while (!queue.isEmpty()) {
- LinkedList<Integer> level = new LinkedList<>();//每一层的节点 jdk自带的
- int c2 = 0;
- for (int i = 0; i < c1; i++) {
- TreeNode n = queue.poll();
- if(odd){ //奇数层从左到右
- level.offerLast(n.val);//尾部插入
- }else{//偶数层从右到左
- level.offerFirst(n.val);//头部插入
- }
- if (n.left != null) {
- queue.offer(n.left);
- c2++;
- }
- if (n.right != null) {
- queue.offer(n.right);
- c2++;
- }
- }
- odd = !odd;//取反
- res.add(level);
- c1 = c2;
- }
- return res;
- }
复制代码
|