leetcode 103. Binary Tree Zigzag Level Order Traversal-深度遍历|广度遍历|递归|非递归
来源:互联网 发布:中国电信4g网络覆盖 编辑:程序博客网 时间:2024/04/30 17:35
原题链接:103. Binary Tree Zigzag Level Order Traversal
【思路2-Java】dfs、递归、非递归实现
【思路-Java】bfs、非递归实现
要将二叉树的 zigzag 遍历返回。本思路采用 dfs 实现,实现方法很多,可以用两个栈,第奇数层压入一个栈,然后取出放入集合中,第偶数层压入另一个栈,同样取出放入集合中。另外可以采用可以采用一个队列,一层层地放入集合中,对第奇数层集合进行反转,并将结果放入结果集中:
public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); boolean right2left = false; while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<Integer>(); while (size-- > 0) { root = queue.poll(); if(root != null) { level.add(root.val); queue.add(root.left); queue.add(root.right); } } if (right2left) Collections.reverse(level); right2left = !right2left; if(!level.isEmpty()) res.add(level); } return res; }}
33 / 33 test cases passed. Runtime: 2 ms Your runtime beats 60.36% of javasubmissions.
【思路2-Java】dfs、递归、非递归实现
实际上 dfs 效率并不是很高,先往结果集 res 中加入中间集合 ArrayList,然后再往 ArrayList 中添加元素:
public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); dfs(root, res, 0); System.out.println(res); return res; } private void dfs(TreeNode root, List<List<Integer>> res, int level) { if (root == null) return; if (res.size() <= level) res.add(new ArrayList<Integer>()); if (level % 2 == 0) res.get(level).add(root.val); else res.get(level).add(0, root.val); dfs(root.left, res, level+1); dfs(root.right, res, level+1); }}33 / 33 test cases passed. Runtime: 7 ms Your runtime beats 2.11% of javasubmissions.
public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); HashMap<TreeNode, Integer> hm = new HashMap<>(); hm.put(root, 0); Stack<TreeNode> stack = new Stack<>(); stack.add(root); while (!stack.isEmpty()) { root = stack.pop(); if (root != null) { int level = hm.get(root); if (level == res.size()) res.add(new ArrayList<Integer>()); if (level % 2 == 0) res.get(level).add(root.val); else res.get(level).add(0, root.val); hm.put(root.right, level+1); stack.add(root.right); hm.put(root.left, level+1); stack.add(root.left); } } return res; }33 / 33 test cases passed. Runtime: 6 ms Your runtime beats 2.19% of javasubmissions.
1 0
- leetcode 103. Binary Tree Zigzag Level Order Traversal-深度遍历|广度遍历|递归|非递归
- leetcode 102.Binary Tree Level Order Traversal-数的层次遍历|递归|非递归实现
- leetcode 103. Binary Tree Zigzag Level Order Traversal BFS广度优先遍历
- 【leetcode 层序遍历】Binary Tree Zigzag Level Order Traversal
- leetcode---Binary Tree Zigzag Level Order Traversal---层次遍历
- Leetcode 103. Binary Tree Zigzag Level Order Traversal 二叉树Zigzag遍历 解题报告
- 层次遍历变种103. Binary Tree Zigzag Level Order Traversal
- LeetCode 103. Binary Tree Zigzag Level Order Traversal(二叉树之字形遍历)
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树层次遍历 栈]
- (二叉树z字形层次遍历)LeetCode#103. Binary Tree Zigzag Level Order Traversal
- [LeetCode]103. Binary Tree Zigzag Level Order Traversal--二叉树之字形遍历
- Binary Tree Zigzag Level Order Traversal 二叉树按层遍历,zigzag输出@LeetCode
- Binary Tree Zigzag Level Order Traversal,bfs,层序遍历
- Binary Tree Zigzag Level Order Traversal 之字形遍历二叉树
- LeetCode Binary Tree Preorder Traversal (二叉树先序遍历非递归)
- [leetcode] Binary Tree Preorder Traversal 非递归先序遍历
- LeetCode:Binary Tree Traversal(二叉树遍历非递归)
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- 营业执照ocr识别sdk
- Codeforces 217E Alien DNA (树状数组求第k大)
- eclipse中查看框架的源码方式
- DES密码算法
- java 用String类实现十进制转二进制
- leetcode 103. Binary Tree Zigzag Level Order Traversal-深度遍历|广度遍历|递归|非递归
- apply()函数族
- 【Mysql】建立第一个存储过程
- NYOJ 27 水池数目 (BFS,DFS)
- 安卓学习计划
- HDU 1017 A Mathematical Curiosity
- Android Dialog 系统样式讲解及透明背景
- C++第6次作业
- Android Studio发布项目到Jcenter