LeetCode107. Binary Tree Level Order Traversal II 解题报告
Posted 月盡天明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode107. Binary Tree Level Order Traversal II 解题报告相关的知识,希望对你有一定的参考价值。
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51508308
Subject
出处:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \\
9 20
/ \\
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
Explain
层序遍历,从底部开始往上按层输出。
该题目与【102. Binary Tree Level Order Traversal】类似。只不过反过来而已。
Solution
其实,最省事的方法,就是将层序正向输出得到的结果反转一下即可。
使用【102. Binary Tree Level Order Traversal】的方法,得到List之后,然后调用Collections.reverse(list); 方法反转一下就OK。
solution 1
【102】题目中的非递归方法,是使用队列,然后往ArrayList中添加每一层的结果。
将ArrayList改为LinkedList,然后每次添加一层的结果,都添加到头部,即调用 addFirst() 方法。
/**
* 3ms <br />
* beats 34.33% of java submissions
*
* @author jacksen
* @param root
* @return
*/
public List<List<Integer>> levelOrderBottom(TreeNode root) {
LinkedList<List<Integer>> result = new LinkedList<List<Integer>>();
if (root == null) {
return result;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int i = queue.size(); // 记录每层的结点个数
TreeNode tempNode = null;
List<Integer> singleLevel = new ArrayList<>();
while (!queue.isEmpty()) {
if (i == 0) {// 一层记录结束
//
result.addFirst(singleLevel);
i = queue.size();
singleLevel = new ArrayList<>();
}
tempNode = queue.poll();
singleLevel.add(tempNode.val);
--i;
if (tempNode.left != null) {
queue.add(tempNode.left);
}
if (tempNode.right != null) {
queue.add(tempNode.right);
}
}
result.addFirst(singleLevel);
return result;
}
LeetCode平台 Run Time 是 3ms 。
solution 2
递归方式
方法二依旧可以按照【102】题目中的递归方法修改一下即可。
/**
* 递归方式 <br />
* 重要的是记录层级<br />
* 2ms<br />
* eats81.17% of java submissions
*
* @param root
* @return
*/
public List<List<Integer>> levelOrderBottom2(TreeNode root) {
LinkedList<List<Integer>> result = new LinkedList<List<Integer>>();
levelRecursion(root, result, 0);
return result;
}
/**
* 递归方法
*/
private void levelRecursion(TreeNode node,
LinkedList<List<Integer>> result, int level) {
if (node == null) {
return;
}
if (result.size() < level + 1) {// 说明还需要添加一行
result.addFirst(new ArrayList<Integer>());
}
result.get(result.size() - 1 - level).add(node.val);
levelRecursion(node.left, result, level + 1);
levelRecursion(node.right, result, level + 1);
}
LeetCode平台 Run Time 是 2ms 。
so easy~~
以上是关于LeetCode107. Binary Tree Level Order Traversal II 解题报告的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode107. Binary Tree Level Order Traversal II 解题报告
LeetCode_107. Binary Tree Level Order Traversal II
Leetcode 107 Binary Tree Level Order Traversal II
LeetCode107 Binary Tree Level Order Traversal II