Skip to content

Commit b7736fb

Browse files
committed
[zh-tw] Add Binary Tree Level Order Traversal II
1 parent 5a2b4c3 commit b7736fb

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# Binary Tree Level Order Traversal II
2+
3+
## Question
4+
5+
- leetcode: [Binary Tree Level Order Traversal II | LeetCode OJ](https://leetcode.com/problems/binary-tree-level-order-traversal-ii/)
6+
- lintcode: [(70) Binary Tree Level Order Traversal II](http://www.lintcode.com/en/problem/binary-tree-level-order-traversal-ii/)
7+
8+
```
9+
Given a binary tree, return the bottom-up level order traversal of its nodes' values.
10+
(ie, from left to right, level by level from leaf to root).
11+
12+
Example
13+
Given binary tree {3,9,20,#,#,15,7},
14+
15+
3
16+
/ \
17+
9 20
18+
/ \
19+
15 7
20+
21+
22+
return its bottom-up level order traversal as:
23+
[
24+
[15,7],
25+
[9,20],
26+
[3]
27+
]
28+
```
29+
30+
## 題解
31+
32+
這題在普通的 BFS 基礎上增加了逆序輸出,簡單的實現可以使用 Stack 或者最後對結果逆序。
33+
34+
### Java - Stack
35+
36+
```java
37+
/**
38+
* Definition of TreeNode:
39+
* public class TreeNode {
40+
* public int val;
41+
* public TreeNode left, right;
42+
* public TreeNode(int val) {
43+
* this.val = val;
44+
* this.left = this.right = null;
45+
* }
46+
* }
47+
*/
48+
49+
50+
public class Solution {
51+
/**
52+
* @param root: The root of binary tree.
53+
* @return: buttom-up level order a list of lists of integer
54+
*/
55+
public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
56+
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
57+
if (root == null) return result;
58+
59+
Stack<ArrayList<Integer>> s = new Stack<ArrayList<Integer>>();
60+
Queue<TreeNode> q = new LinkedList<TreeNode>();
61+
q.offer(root);
62+
while (!q.isEmpty()) {
63+
int qLen = q.size();
64+
ArrayList<Integer> aList = new ArrayList<Integer>();
65+
for (int i = 0; i < qLen; i++) {
66+
TreeNode node = q.poll();
67+
aList.add(node.val);
68+
if (node.left != null) q.offer(node.left);
69+
if (node.right != null) q.offer(node.right);
70+
}
71+
s.push(aList);
72+
}
73+
74+
while (!s.empty()) {
75+
result.add(s.pop());
76+
}
77+
return result;
78+
}
79+
}
80+
```
81+
82+
### Java - Reverse
83+
84+
```java
85+
/**
86+
* Definition of TreeNode:
87+
* public class TreeNode {
88+
* public int val;
89+
* public TreeNode left, right;
90+
* public TreeNode(int val) {
91+
* this.val = val;
92+
* this.left = this.right = null;
93+
* }
94+
* }
95+
*/
96+
97+
98+
public class Solution {
99+
/**
100+
* @param root: The root of binary tree.
101+
* @return: buttom-up level order a list of lists of integer
102+
*/
103+
public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
104+
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
105+
if (root == null) return result;
106+
107+
Queue<TreeNode> q = new LinkedList<TreeNode>();
108+
q.offer(root);
109+
while (!q.isEmpty()) {
110+
int qLen = q.size();
111+
ArrayList<Integer> aList = new ArrayList<Integer>();
112+
for (int i = 0; i < qLen; i++) {
113+
TreeNode node = q.poll();
114+
aList.add(node.val);
115+
if (node.left != null) q.offer(node.left);
116+
if (node.right != null) q.offer(node.right);
117+
}
118+
result.add(aList);
119+
}
120+
121+
Collections.reverse(result);
122+
return result;
123+
}
124+
}
125+
```
126+
127+
### 源碼分析
128+
129+
Java 中 Queue 是接口,通常可用 LinkedList 實例化。
130+
131+
### 複雜度分析
132+
133+
時間複雜度爲 $$O(n)$$, 使用了 Queue 或者 Stack 作爲輔助空間,空間複雜度爲 $$O(n)$$.

0 commit comments

Comments
 (0)