49
49
50
50
<!-- 这里可写通用的实现逻辑 -->
51
51
52
- 层序遍历,取每层最后一个元素
52
+ 层序遍历,取每层最后一个元素。
53
53
54
54
<!-- tabs:start -->
55
55
@@ -72,14 +72,13 @@ class Solution:
72
72
d = deque([root])
73
73
while d:
74
74
n = len (d)
75
+ ans.append(d[0 ].val)
75
76
for i in range (n):
76
77
node = d.popleft()
77
- if i == n - 1 :
78
- ans.append(node.val)
79
- if node.left:
80
- d.append(node.left)
81
78
if node.right:
82
79
d.append(node.right)
80
+ if node.left:
81
+ d.append(node.left)
83
82
return ans
84
83
```
85
84
@@ -109,21 +108,18 @@ class Solution {
109
108
if (root == null ) {
110
109
return ans;
111
110
}
112
- Queue <TreeNode > q = new ArrayDeque<> ();
111
+ Deque <TreeNode > q = new ArrayDeque<> ();
113
112
q. offer(root);
114
113
while (! q. isEmpty()) {
115
- int n = q . size( );
116
- for (int i = 0 ; i < n; i ++ ) {
114
+ ans . add(q . peekFirst() . val );
115
+ for (int i = q . size() ; i > 0 ; -- i ) {
117
116
TreeNode node = q. poll();
118
- if (i == n - 1 ) {
119
- ans . add (node. val );
117
+ if (node . right != null ) {
118
+ q . offer (node. right );
120
119
}
121
120
if (node. left != null ) {
122
121
q. offer(node. left);
123
122
}
124
- if (node. right != null ) {
125
- q. offer(node. right);
126
- }
127
123
}
128
124
}
129
125
return ans;
@@ -134,48 +130,35 @@ class Solution {
134
130
### ** C++**
135
131
136
132
``` cpp
137
- class Solution
138
- {
133
+ /* *
134
+ * Definition for a binary tree node.
135
+ * struct TreeNode {
136
+ * int val;
137
+ * TreeNode *left;
138
+ * TreeNode *right;
139
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
140
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
141
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
142
+ * };
143
+ */
144
+ class Solution {
139
145
public:
140
- vector<int > rightSideView ( TreeNode* root )
141
- {
142
- vector<int > res;
143
-
144
- if ( !root )
146
+ vector<int > rightSideView(TreeNode* root) {
147
+ vector<int > ans;
148
+ if (!root) return ans;
149
+ queue<TreeNode* > q;
150
+ q.push(root);
151
+ while (!q.empty())
145
152
{
146
- return res;
147
- }
148
-
149
- queue<TreeNode* > que;
150
- que.push ( root );
151
-
152
- while ( !que.empty() )
153
- {
154
- int size = que.size();
155
-
156
- for ( int i = 0; i < size; i++ )
157
- {
158
- TreeNode* ptr = que.front();
159
- que.pop();
160
-
161
- if ( i == size - 1 )
162
- {
163
- res.push_back ( ptr->val );
164
- }
165
-
166
- if ( ptr->left )
167
- {
168
- que.push ( ptr->left );
169
- }
170
-
171
- if ( ptr-> right )
172
- {
173
- que.push ( ptr->right );
174
- }
153
+ ans.push_back(q.front()->val);
154
+ for (int i = q.size(); i > 0; --i) {
155
+ auto node = q.front();
156
+ q.pop();
157
+ if (node->right) q.push(node->right);
158
+ if (node->left) q.push(node->left);
175
159
}
176
160
}
177
-
178
- return res;
161
+ return ans;
179
162
}
180
163
};
181
164
```
@@ -192,27 +175,25 @@ public:
192
175
* }
193
176
*/
194
177
func rightSideView(root *TreeNode) []int {
195
- var ans []int
196
- if root == nil {
197
- return ans
198
- }
199
- q := []*TreeNode{root}
200
- for n := len (q); n > 0 ; n = len (q) {
201
- for i := 0 ; i < n; i++ {
202
- node := q[0 ]
203
- q = q[1 :]
204
- if i == n - 1 {
205
- ans = append (ans, node.Val )
206
- }
207
- if node.Left != nil {
208
- q = append (q, node.Left )
209
- }
210
- if node.Right != nil {
211
- q = append (q, node.Right )
212
- }
213
- }
214
- }
215
- return ans
178
+ var ans []int
179
+ if root == nil {
180
+ return ans
181
+ }
182
+ q := []*TreeNode{root}
183
+ for len(q) > 0 {
184
+ ans = append(ans, q[0].Val)
185
+ for i := len(q); i > 0; i-- {
186
+ node := q[0]
187
+ q = q[1:]
188
+ if node.Right != nil {
189
+ q = append(q, node.Right)
190
+ }
191
+ if node.Left != nil {
192
+ q = append(q, node.Left)
193
+ }
194
+ }
195
+ }
196
+ return ans
216
197
}
217
198
```
218
199
0 commit comments