44
44
``` python
45
45
# Definition for a binary tree node.
46
46
# class TreeNode:
47
- # def __init__(self, x):
48
- # self.val = x
49
- # self.left = None
50
- # self.right = None
51
-
47
+ # def __init__(self, val=0, left=None, right=None):
48
+ # self.val = val
49
+ # self.left = left
50
+ # self.right = right
52
51
class Solution :
53
52
def levelOrderBottom (self , root : TreeNode) -> List[List[int ]]:
53
+ ans = []
54
54
if root is None :
55
- return []
56
- q = [root]
57
- res = []
55
+ return ans
56
+ q = deque([root])
58
57
while q:
59
- size = len (q)
58
+ n = len (q)
60
59
t = []
61
- for _ in range (size ):
62
- node = q.pop( 0 )
60
+ for _ in range (n ):
61
+ node = q.popleft( )
63
62
t.append(node.val)
64
- if node.left is not None :
63
+ if node.left:
65
64
q.append(node.left)
66
- if node.right is not None :
65
+ if node.right:
67
66
q.append(node.right)
68
- res .append(t)
69
- return res [::- 1 ]
67
+ ans .append(t)
68
+ return ans [::- 1 ]
70
69
```
71
70
72
71
### ** Java**
@@ -80,28 +79,114 @@ class Solution:
80
79
* int val;
81
80
* TreeNode left;
82
81
* TreeNode right;
83
- * TreeNode(int x) { val = x; }
82
+ * TreeNode() {}
83
+ * TreeNode(int val) { this.val = val; }
84
+ * TreeNode(int val, TreeNode left, TreeNode right) {
85
+ * this.val = val;
86
+ * this.left = left;
87
+ * this.right = right;
88
+ * }
84
89
* }
85
90
*/
86
91
class Solution {
87
92
public List<List<Integer > > levelOrderBottom (TreeNode root ) {
88
- if (root == null ) return Collections . emptyList();
89
- Deque<TreeNode > q = new ArrayDeque<> ();
90
- List<List<Integer > > res = new ArrayList<> ();
91
- q. offer(root);
93
+ LinkedList<List<Integer > > ans = new LinkedList<> ();
94
+ if (root == null ) {
95
+ return ans;
96
+ }
97
+ Deque<TreeNode > q = new LinkedList<> ();
98
+ q. offerLast(root);
92
99
while (! q. isEmpty()) {
93
- int size = q. size();
94
100
List<Integer > t = new ArrayList<> ();
95
- while (size -- > 0 ) {
96
- TreeNode node = q. poll ();
101
+ for ( int i = 0 , n = q . size(); i < n; ++ i ) {
102
+ TreeNode node = q. pollFirst ();
97
103
t. add(node. val);
98
- if (node. left != null ) q. offer(node. left);
99
- if (node. right != null ) q. offer(node. right);
104
+ if (node. left != null ) {
105
+ q. offerLast(node. left);
106
+ }
107
+ if (node. right != null ) {
108
+ q. offerLast(node. right);
109
+ }
110
+ }
111
+ ans. addFirst(t);
112
+ }
113
+ return ans;
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### ** C++**
119
+
120
+ ``` cpp
121
+ /* *
122
+ * Definition for a binary tree node.
123
+ * struct TreeNode {
124
+ * int val;
125
+ * TreeNode *left;
126
+ * TreeNode *right;
127
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
128
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
129
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
130
+ * };
131
+ */
132
+ class Solution {
133
+ public:
134
+ vector<vector<int >> levelOrderBottom(TreeNode* root) {
135
+ vector<vector<int >> ans;
136
+ if (!root) return ans;
137
+ queue<TreeNode* > q{{root}};
138
+ while (!q.empty())
139
+ {
140
+ vector<int > t;
141
+ for (int i = 0, n = q.size(); i < n; ++i)
142
+ {
143
+ TreeNode* node = q.front();
144
+ q.pop();
145
+ t.push_back(node->val);
146
+ if (node->left) q.push(node->left);
147
+ if (node->right) q.push(node->right);
100
148
}
101
- res . add( 0 , t);
149
+ ans.push_back( t);
102
150
}
103
- return res;
151
+ reverse(ans.begin(), ans.end());
152
+ return ans;
104
153
}
154
+ };
155
+ ```
156
+
157
+ ### **Go**
158
+
159
+ ```go
160
+ /**
161
+ * Definition for a binary tree node.
162
+ * type TreeNode struct {
163
+ * Val int
164
+ * Left *TreeNode
165
+ * Right *TreeNode
166
+ * }
167
+ */
168
+ func levelOrderBottom(root *TreeNode) [][]int {
169
+ ans := [][]int{}
170
+ if root == nil {
171
+ return ans
172
+ }
173
+ q := []*TreeNode{root}
174
+ for len(q) > 0 {
175
+ var t []int
176
+ for i, n := 0, len(q); i < n; i++ {
177
+ node := q[0]
178
+ q = q[1:]
179
+ t = append(t, node.Val)
180
+ if node.Left != nil {
181
+ q = append(q, node.Left)
182
+ }
183
+ if node.Right != nil {
184
+ q = append(q, node.Right)
185
+ }
186
+ }
187
+ ans = append([][]int{t}, ans...)
188
+ }
189
+ return ans
105
190
}
106
191
```
107
192
@@ -121,33 +206,21 @@ class Solution {
121
206
* @return {number[][]}
122
207
*/
123
208
var levelOrderBottom = function (root ) {
124
- if (! root) {
125
- return [];
126
- }
127
- let q = [],
128
- output = [],
129
- levelOutput = [];
130
- q .push (root);
131
- q .push (null );
209
+ let ans = [];
210
+ if (! root) return ans;
211
+ let q = [root];
132
212
while (q .length ) {
133
- let cur = q .shift ();
134
- levelOutput .push (cur .val );
135
- if (cur .left ) {
136
- q .push (cur .left );
137
- }
138
- if (cur .right ) {
139
- q .push (cur .right );
140
- }
141
- if (! q[0 ]) {
142
- q .shift ();
143
- output .unshift (levelOutput);
144
- levelOutput = [];
145
- if (q .length ) {
146
- q .push (null );
147
- }
213
+ let n = q .length ;
214
+ let t = [];
215
+ while (n-- > 0 ) {
216
+ const node = q .shift ();
217
+ t .push (node .val );
218
+ if (node .left ) q .push (node .left );
219
+ if (node .right ) q .push (node .right );
148
220
}
221
+ ans .unshift (t);
149
222
}
150
- return output ;
223
+ return ans ;
151
224
};
152
225
```
153
226
0 commit comments