leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
来源:互联网 发布:magics软件windows版本 编辑:程序博客网 时间:2024/06/05 14:28
最近做了不少二叉树的题,所以这道题两遍过了,第一遍是特别傻逼的忘记对root判空了,一定要注意。
方法是层序历遍,然后用tmp来标记行,用add()和addFirst()来实现LIST的不同方向插入
public static List<List<Integer>> zigzagLevelOrder(TreeNode root) { LinkedList<List<Integer>> a1 = new LinkedList<List<Integer>>(); LinkedList<Integer> a2 = new LinkedList<Integer>(); Queue<TreeNode> q = new LinkedList<TreeNode>(); int i=0,j=0; int tmp=0; if(root==null) return a1; q.offer(root); j++; while (!q.isEmpty()){ TreeNode t = q.poll(); j--; if(t.left!=null){ q.offer(t.left); i++; } if(t.right!=null){ q.offer(t.right); i++; } if(tmp==0){ a2.add(t.val); if(j==0){ j=i; i=0; a1.add(a2); a2 = new LinkedList<Integer>(); tmp=1; } }else{ a2.addFirst(t.val); if(j==0){ j=i; i=0; a1.add(a2); a2 = new LinkedList<Integer>(); tmp=0; } } } return a1; }
Update 2015/08/18: 相较于上一个历遍题,只需要增加一个变量flag记录层数,奇数层正序,偶数层逆序即可
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { // write your code here ArrayList<ArrayList<Integer>> res = new ArrayList<>(); Queue<TreeNode> q = new LinkedList<>(); if (root == null) return res; int current = 1; int next = 0; int flag = 1; ArrayList<Integer> in = new ArrayList<>(); while (root != null){ if (flag % 2 == 1) in.add(root.val); else in.add(0, root.val); if (root.left != null){ q.add(root.left); next++; } if (root.right != null){ q.add(root.right); next++; } if (q.size() != 0){ root = q.poll(); current--; if (current == 0){ res.add(in); in = new ArrayList<Integer>(); current = next; next = 0; flag++; } } else { res.add(in); break; } } return res; }}
0 0
- leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
- leedcode做题总结,题目Binary Tree Level Order TraversalI/II 2012/09/28
- Middle-题目70:103. Binary Tree Zigzag Level Order Traversal
- LeetCode算法题目:Binary Tree Zigzag Level Order Traversal
- leecode 解题总结:103. Binary Tree Zigzag Level Order Traversal
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Moving interrupts to threads
- canvas 文本
- 创建透明的UIToolbar
- unity3D_自学笔记:第1天-简单了解unity3d
- 11g Rac开启归档
- leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
- UITableView 应用(五)UITableView样式的自定义
- 查找线程化的中断
- 数据仓库与数据挖掘相关基础概念
- 怎样彻底成功恢复误删除的jpg数码相机照片
- STM32编译器keil中中printf函数的应用
- 重建二叉树
- Android Volley 基本用法
- 从零开始nodejs系列文章