【LeetCode】107.Binary Tree Level Order Traversal II解題報告
7710 ワード
転載は出典を明記してください。http://blog.csdn.net/crazy1235/article/details/51508308
Subject
出典:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
レイヤーを巡回して、底から上へ層ごとに出力します。このテーマは【102.Binary Tree Level Order Traversal】と似ています。ただの逆です。
Solution
実は、一番手間がかからない方法は、層順順順に出力された結果を反転させることです。「102.Binary Tree Level Order Traversal」という方法を使って、Listを得た後、Collection s.reverseを呼び出します。方法を逆にすればOKです。
ソロ1
【102】タイトルの非再帰方法は、キューを使って、それぞれの層をArayListに追加した結果である。
ArayListをLinked Listに変更し、層を追加するたびにヘッダに追加します。すなわち、addFirst()メソッドを呼び出します。
solution 2
再帰的方式
方法二は相変わらず【102】テーマの再帰的な方法によって修正すればいいです。
so easy~
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]
]
エクスプレーンレイヤーを巡回して、底から上へ層ごとに出力します。このテーマは【102.Binary Tree Level Order Traversal】と似ています。ただの逆です。
Solution
実は、一番手間がかからない方法は、層順順順に出力された結果を反転させることです。「102.Binary Tree Level Order Traversal」という方法を使って、Listを得た後、Collection s.reverseを呼び出します。方法を逆にすればOKです。
ソロ1
【102】タイトルの非再帰方法は、キューを使って、それぞれの層をArayListに追加した結果である。
ArayListをLinked Listに変更し、層を追加するたびにヘッダに追加します。すなわち、addFirst()メソッドを呼び出します。
/**
* 3ms
* 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は3 msです。solution 2
再帰的方式
方法二は相変わらず【102】テーマの再帰的な方法によって修正すればいいです。
/**
*
*
* 2ms
* eats81.17% of java submissions
*
* @param root
* @return
*/
public List> levelOrderBottom2(TreeNode root) {
LinkedList> result = new LinkedList>();
levelRecursion(root, result, 0);
return result;
}
/**
*
*/
private void levelRecursion(TreeNode node,
LinkedList> result, int level) {
if (node == null) {
return;
}
if (result.size() < level + 1) {//
result.addFirst(new ArrayList());
}
result.get(result.size() - 1 - level).add(node.val);
levelRecursion(node.left, result, level + 1);
levelRecursion(node.right, result, level + 1);
}
LeetCodeプラットフォームRun Timeは2 msです。so easy~