@@ -160,21 +160,17 @@ func isSymme(left *TreeNode, right *TreeNode) bool {
160
160
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
161
161
* };
162
162
*/
163
-
164
163
class Solution {
165
164
public:
166
- bool isSymmetric(TreeNode* a , TreeNode* b ) {
167
- // 均为空,则直接返回true 。有且仅有一个不为空,则返回false
168
- if (a == nullptr && b == nullptr) {
165
+ bool isSymmetric(TreeNode* left , TreeNode* right ) {
166
+ // 均为空,则直接返回 true 。有且仅有一个不为空,则返回 false
167
+ if (left == nullptr && right == nullptr) {
169
168
return true;
170
- } else if (a == nullptr && b != nullptr) {
171
- return false;
172
- } else if (a != nullptr && b == nullptr) {
169
+ }
170
+ if (left == nullptr || right == nullptr || left->val != right->val) {
173
171
return false;
174
172
}
175
-
176
- // 判定值是否相等,和下面的节点是否对称
177
- return (a->val == b->val) && isSymmetric(a->left, b->right) && isSymmetric(a->right, b->left);
173
+ return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
178
174
}
179
175
180
176
bool isSymmetric(TreeNode* root) {
@@ -185,7 +181,6 @@ public:
185
181
return isSymmetric(root->left, root->right);
186
182
}
187
183
};
188
-
189
184
```
190
185
191
186
### ** TypeScript**
@@ -209,19 +204,14 @@ function isSymmetric(root: TreeNode | null): boolean {
209
204
if (root == null ) {
210
205
return true ;
211
206
}
212
- const dfs = (l : TreeNode | null, r : TreeNode | null) => {
213
- if (l == null && r == null) {
207
+ const dfs = (left : TreeNode | null , right : TreeNode | null ) => {
208
+ if (left == null && right == null ) {
214
209
return true ;
215
210
}
216
- if (l == null || r == null) {
211
+ if (left == null || right == null || left . val != right . val ) {
217
212
return false ;
218
213
}
219
- return (
220
- l.val == r.val &&
221
- dfs(l.left, r.right) &&
222
- dfs(l.right, r.left) &&
223
- true
224
- );
214
+ return dfs (left .left , right .right ) && dfs (left .right , right .left );
225
215
};
226
216
return dfs (root .left , root .right );
227
217
}
@@ -248,34 +238,29 @@ function isSymmetric(root: TreeNode | null): boolean {
248
238
// }
249
239
// }
250
240
// }
251
- use std :: cell :: RefCell ;
252
241
use std :: rc :: Rc ;
242
+ use std :: cell :: RefCell ;
253
243
impl Solution {
244
+ fn dfs (left : & Option <Rc <RefCell <TreeNode >>>, right : & Option <Rc <RefCell <TreeNode >>>) -> bool {
245
+ if left . is_none () && right . is_none () {
246
+ return true ;
247
+ }
248
+ if left . is_none () || right . is_none () {
249
+ return false ;
250
+ }
251
+ let l = left . as_ref (). unwrap (). borrow ();
252
+ let r = right . as_ref (). unwrap (). borrow ();
253
+ l . val == r . val && Self :: dfs (& l . left, & r . right) && Self :: dfs (& l . right, & r . left)
254
+ }
255
+
254
256
pub fn is_symmetric (root : Option <Rc <RefCell <TreeNode >>>) -> bool {
255
- match root {
256
- None => true ,
257
- Some (root ) => {
258
- fn dfs (
259
- l : & Option <Rc <RefCell <TreeNode >>>,
260
- r : & Option <Rc <RefCell <TreeNode >>>,
261
- ) -> bool {
262
- if l . is_none () && r . is_none () {
263
- return true ;
264
- }
265
- if l . is_none () || r . is_none () {
266
- return false ;
267
- }
268
- let l = l . as_ref (). unwrap (). borrow ();
269
- let r = r . as_ref (). unwrap (). borrow ();
270
- l . val == r . val && dfs (& l . left, & r . right) && dfs (& l . right, & r . left) && true
271
- }
272
- let node = root . borrow ();
273
- dfs (& node . left, & node . right)
274
- }
257
+ if root . is_none () {
258
+ return true ;
275
259
}
260
+ let node = root . as_ref (). unwrap (). borrow ();
261
+ Self :: dfs (& node . left, & node . right)
276
262
}
277
263
}
278
-
279
264
```
280
265
281
266
### ** ...**
0 commit comments