5.1.6 Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:mongodb与mysql区别 编辑:程序博客网 时间:2024/06/18 08:20
https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
我的思路:使用和Binary Tree Level Order Traversal一样的方法,只是在输出的时候,设置一个boolean,对每一层进行反转。
我的代码:
public class Solution { public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if(root == null) return result; ArrayList<TreeNode> nodeList = new ArrayList<TreeNode>(); nodeList.add(root); int nodeInCurLevel = 1; int nodeInNextLevel = 0; ArrayList<Integer> temp = new ArrayList<Integer>(); while(!nodeList.isEmpty()){ TreeNode node = nodeList.remove(0); temp.add(node.val); nodeInCurLevel --; if(node.left != null){ nodeList.add(node.left); nodeInNextLevel++; } if(node.right != null){ nodeList.add(node.right); nodeInNextLevel++; } if(nodeInCurLevel == 0){ result.add(temp); temp = new ArrayList<Integer>(); nodeInCurLevel = nodeInNextLevel; nodeInNextLevel = 0; } } boolean reverse = false; ArrayList<ArrayList<Integer>> nResult = new ArrayList<ArrayList<Integer>>(); for(int i = 0; i < result.size(); i++){ ArrayList<Integer> list = result.get(i); ArrayList<Integer> nList = new ArrayList<Integer>(); if(reverse == true){ for(int j = list.size()-1; j >=0; j--){ nList.add(list.get(j)); } nResult.add(nList); reverse = false; } else{ nResult.add(list); reverse = true; } } return nResult; }}
第二种方法:refer http://blog.csdn.net/muscler/article/details/23098359
它这种方法如果用在Level order traversal上面,连当前层和上一层的计数器都不需要了。(已经在leetcode上做了实验)。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { //bfs 层序遍历,隔层reverse tmp public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (root == null) { return res; } ArrayList<Integer> tmp = new ArrayList<Integer>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); int num; boolean reverse = false; while (!queue.isEmpty()) { num = queue.size(); tmp.clear(); for (int i = 0; i < num; i++) { TreeNode node = queue.poll(); tmp.add(node.val); if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } if (reverse) { Collections.reverse(tmp); reverse = false; } else reverse = true; res.add(new ArrayList<Integer>(tmp)); } return res; }}
问题:倒数第二行代码:
res.add(new ArrayList<Integer>(tmp));如果变成
res.add(tmp);
就会产生wrong answer. why?
Input:{1,2}
Output:[[2],[2]]
Expected:[[1],[2]]
0 0
- 5.1.6 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
- [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
- Ubuntu Kylin 14.04 LTS使用体验
- Codeforces Round #255(Div. 2)
- 5.1.5 Binary Tree Level Order Traversal II
- 期末总结
- iOS 获取 当前设备 可用内存 及当前 应用 所占内存 (转)
- 5.1.6 Binary Tree Zigzag Level Order Traversal
- Codeforces Round #255 (Div. 2) C
- Codeforces Round #FF (Div. 2):Problem A - DZY Loves Hash
- 7.13ACM暑期集训开始
- Hibernate的一些学习记录
- Codeforces 446C —— DZY Loves Fibonacci Numbers(线段树)
- 前台JS控制。net后台checkbox
- Linux 内核时间格式
- Codeforces Round #FF (Div. 2):B. DZY Loves Strings