LeetCode题解-102&107-Binary Tree Level Order Traversal Ⅰ,Ⅱ
来源:互联网 发布:mac电脑顿号怎么打 编辑:程序博客网 时间:2024/06/06 00:00
原题
102
107
解法
思路分析
与前面很多的题类似,为二叉树的广度优先遍历(BFS),借助一个队列,共N次迭代,N为树的层高,每一次迭代全部第i层的节点出队列,第i+1层的节点进队列,因此每一次可以处理第i层的所有节点的值。
图解(102)
107的图解和102几乎相同,除了oneLevelNodes每次都是增加到AllLevelNodes的最前端;
代码102
由于oneLevelNodes每次都是增加到AllLevelNodes的尾部,所以采用ArrayList;
public class Solution102 { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> allLevelNodes = new ArrayList<List<Integer>>(); List<Integer> oneLevelNode = new ArrayList<Integer>(); Deque<TreeNode> deque = new LinkedList<TreeNode>(); if (root != null) deque.push(root); while (!deque.isEmpty()){ int dequeSize = deque.size(); while (dequeSize-- > 0){ TreeNode currentNode = deque.pop(); oneLevelNode.add(currentNode.val); if (currentNode.left != null) deque.addLast(currentNode.left); if (currentNode.right != null) deque.addLast(currentNode.right); } allLevelNodes.add(new ArrayList<Integer>(oneLevelNode)); oneLevelNode.clear(); } return allLevelNodes; }}
代码107
oneLevelNodes每次都是插入到AllLevelNodes的最前端,所以采用LinkedList
public class Solution107 { public List<List<Integer>> levelOrderBottom(TreeNode root) { Deque<List<Integer>> allLevelNodes = new LinkedList<List<Integer>>(); List<Integer> oneLevelNode = new ArrayList<Integer>(); Deque<TreeNode> deque = new LinkedList<TreeNode>(); if (root != null) deque.push(root); while (!deque.isEmpty()){ int dequeSize = deque.size(); while (dequeSize-- > 0){ TreeNode currentNode = deque.pop(); oneLevelNode.add(currentNode.val); if (currentNode.left != null) deque.addLast(currentNode.left); if (currentNode.right != null) deque.addLast(currentNode.right); } allLevelNodes.push(new ArrayList<Integer>(oneLevelNode)); oneLevelNode.clear(); } return (List<List<Integer>>)allLevelNodes; }}
编程时遇到的错误
对List理解的不够深刻,在代码102中往二维List中添加List一开始是使用 allLevelNodes.add(new ArrayList<Integer>(oneLevelNode)); ,这样的话每次添加的都是相同的oneLevelNode这个对象,因此oneLevelNode.clear();之后,allLevelNodes就变为了{[], [], []},应该建立一个新的对象allLevelNodes.add(new ArrayList<Integer>(oneLevelNode));
小demo如下:
public class Main { public static void main(String[] args) throws UnsupportedEncodingException { List<List<String>> listList1 = new ArrayList<List<String>>(); List<String> list = new ArrayList<String>(); list.add("1"); listList1.add(list); System.out.println("第一次:" + listList1); list.add("2"); listList1.add(list); System.out.println("第二次:" + listList1); }}输出:
public class Main { public static void main(String[] args) throws UnsupportedEncodingException { List<List<String>> listList1 = new ArrayList<List<String>>(); List<String> list = new ArrayList<String>(); list.add("1"); listList1.add(new ArrayList<String>(list)); System.out.println("第一次:" + listList1); list.add("2"); listList1.add(new ArrayList<String>(list)); System.out.println("第二次:" + listList1); }}
输出:
0 0
- LeetCode题解-102&107-Binary Tree Level Order Traversal Ⅰ,Ⅱ
- [题解][LeetCode][Binary Tree Level Order Traversal]
- LeetCode题解:Binary Tree Level Order Traversal
- LeetCode题解:Binary Tree Level Order Traversal
- LeetCode 107 Binary Tree Level Order Traversal II题解
- Leetcode 102 Binary Tree Level Order Traversal
- LeetCode(102)Binary Tree Level Order Traversal
- LeetCode 102 Binary Tree Level Order Traversal
- LeetCode: Binary Tree Level Order Traversal [102]
- [leetcode 102]Binary Tree Level Order Traversal
- [LeetCode 102]Binary Tree Level Order Traversal
- leetCode #102 Binary Tree Level Order Traversal
- leetcode-102 Binary Tree Level Order Traversal
- leetcode || 102、Binary Tree Level Order Traversal
- leetcode #102Binary Tree Level Order Traversal
- Leetcode[102]-Binary Tree Level Order Traversal
- LeetCode 102 Binary Tree Level Order Traversal
- LeetCode---(102)Binary Tree Level Order Traversal
- linux 安装redis
- SPHINX做增量索引更新
- jdbc基本使用(三)-批处理
- php curl发送json格式数据并获取状态码 header和body
- CCCC团体天梯赛练习题-关于堆的判断
- LeetCode题解-102&107-Binary Tree Level Order Traversal Ⅰ,Ⅱ
- Volley的使用以及源码分析(一)
- Android 动画--使用Path来规划动画的轨迹
- 不引用服务而使用WCF,手动编写客户端代理类
- leetcode.176. Second Highest Salary
- JAVA检测JS脚本,很强大,佩服!
- dotnet publish 发布错误 No executable found matching command "bower"
- 浅谈Java设计模式(十七)责任链模式(Chain of Responsibility)
- 网络爬虫IP列表