Binary Tree Zigzag Level Order Traversal ---LeetCode
2016-11-28 11:10
393 查看
https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
解题思路:
这道题是层序遍历的变体,分奇偶层正序或逆序输出每层。
Binary Tree Level Order Traversal 这道题是每一个水平层都是从左至右的遍历,Binary Tree Level Order Traversal II 是将水平层从下至上的输出,而这道题是奇数层从左至右的遍历,偶数层从右至左的遍历,最后水平层从上至下的输出。
这里使用两个栈,通过判断奇偶层来决定节点入栈次序。
从 discuss 里面找到了用标志位的写法,这个写法我自己更喜欢一些~
解题思路:
这道题是层序遍历的变体,分奇偶层正序或逆序输出每层。
Binary Tree Level Order Traversal 这道题是每一个水平层都是从左至右的遍历,Binary Tree Level Order Traversal II 是将水平层从下至上的输出,而这道题是奇数层从左至右的遍历,偶数层从右至左的遍历,最后水平层从上至下的输出。
这里使用两个栈,通过判断奇偶层来决定节点入栈次序。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); List<Integer> list = new ArrayList<>(); Stack<TreeNode> curr = new Stack<>(); Stack<TreeNode> next = new Stack<>(); if (root == null) return result; curr.push(root); int level = 1; while (!curr.isEmpty()) { TreeNode node = curr.pop(); if (level % 2 != 0) { if (node.left != null) next.push(node.left); if (node.right != null) next.push(node.right); } else { if (node.right != null) next.push(node.right); if (node.left != null) next.push(node.left); } list.add(node.val); if (curr.isEmpty()) { curr = next; next = new Stack<>(); result.add(list); list = new ArrayList<>(); level++; } } return result; } }
从 discuss 里面找到了用标志位的写法,这个写法我自己更喜欢一些~
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) return result; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); boolean level = true; int size = 1; while (!queue.isEmpty()) { List<Integer> list = new ArrayList<>(); for (int i=0; i<size; i++) { root = queue.poll(); if (level) list.add(root.val); else list.add(0, root.val); if (root.left != null) queue.offer(root.left); if (root.right != null) queue.offer(root.right); } result.add(list); size = queue.size(); level = level ? false : true; } return result; } }
相关文章推荐
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树 栈]
- binary tree zigzag level order traversal leetcode c++
- [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)
- [leetcode] Binary Tree Zigzag Level Order Traversal
- LeetCode 103 Binary Tree Zigzag Level Order Traversal
- 《leetCode》:Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- LeetCode(103)Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- LeetCode(103) Binary Tree Zigzag Level Order Traversal
- LeetCode刷题笔录 Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode 49 Binary Tree Zigzag Level Order Traversal
- LeetCode(103) Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal