LeetCode107. Binary Tree Level Order Traversal II
来源:互联网 发布:算法心得 epub 编辑:程序博客网 时间:2024/05/17 09:38
107.Binary Tree Level Order Traversal II
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}
方法一:
受上一题104.MaximumDepthofBinaryTree的启发,使用队列来做,最后要做一个元素反转处理。其实这种做法就是BFS(广度优先搜索)。
public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if(root == null) return result; Queue<TreeNode> q = new LinkedList<>(); q.add(root); while(!q.isEmpty()){ List<Integer> levelnode = new ArrayList<>(); for(int i = 0, n = q.size(); i < n; i++){ TreeNode node = q.poll(); levelnode.add(node.val); if(node.left != null) q.add(node.left); if(node.right != null) q.add(node.right); } result.add(levelnode); } int length = result.size(); for(int i = 0; i < length / 2; i++){ List<Integer> temp = result.get(i); result.set(i, result.get(length - 1 - i)); result.set(length - 1 - i, temp); } return result;}
方法二:
方法二与方法一思路相同,代码几乎相同,不同的点在于,这里省去了上面将列表翻转的处理,使用 List 自带的方法,List.add(int index, Object object), 这个方法可以在指定位置加入对象,index 每次都为0,即为倒序排列。
public List<List<Integer>> levelOrderBottom2(TreeNode root) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); List<List<Integer>> wrapList = new LinkedList<List<Integer>>(); if(root == null) return wrapList; queue.offer(root); while(!queue.isEmpty()){ int levelNum = queue.size(); List<Integer> subList = new LinkedList<Integer>(); for(int i=0; i<levelNum; i++) { if(queue.peek().left != null) queue.offer(queue.peek().left); if(queue.peek().right != null) queue.offer(queue.peek().right); subList.add(queue.poll().val); } wrapList.add(0, subList);//相当于每次加入的元素都放在第一个位置,免去了上面交换位置的过程 } return wrapList;}
方法三:
使用DFS(深度优先搜索),采用递归,递归理解起来比较抽象。
public List<List<Integer>> levelOrderBottom3(TreeNode root) { List<List<Integer>> wrapList = new LinkedList<List<Integer>>(); levelMaker(wrapList, root, 0); return wrapList;}public void levelMaker(List<List<Integer>> list, TreeNode root, int level) { if(root == null) return; if(level >= list.size()) { list.add(0, new LinkedList<Integer>()); } list.get(list.size()-level-1).add(root.val); levelMaker(list, root.left, level+1); levelMaker(list, root.right, level+1); }
阅读全文
0 0
- LeetCode107 Binary Tree Level Order Traversal II
- leetcode107.Binary Tree Level Order Traversal II
- leetcode107. Binary Tree Level Order Traversal II
- LeetCode107 Binary Tree Level Order Traversal II
- LeetCode107. Binary Tree Level Order Traversal II
- LeetCode107. Binary Tree Level Order Traversal II
- LeetCode107——Binary Tree Level Order Traversal II
- LeetCode107—Binary Tree Level Order Traversal II
- LeetCode107. Binary Tree Level Order Traversal II题解
- LeetCode: Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [Leetcode] Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- vue-touch for vue2.xxx
- hqtest
- 转载几篇linux好文章
- (DT系列二)device tree的书写规范
- 浮动元素水平居中方法
- LeetCode107. Binary Tree Level Order Traversal II
- 海云安:违法移动应用增多,加强自身安全合规建设是关键
- javaSE教程03
- 42打开r40m平台Android6.0下的录音测试(分色排版)
- SqlServer 错误日志切换和查看
- Tomcat性能调优
- poj1276——cash machine
- linux grep 匹配查找
- 题目:MySql数据查询题目(学生和课程成绩)