@@ -379,6 +379,90 @@ const check = (leftPtr, rightPtr) => {
379
379
return leftPtr .val === rightPtr .val && check (leftPtr .left , rightPtr .right ) && check (leftPtr .right , rightPtr .left )
380
380
}
381
381
```
382
+ JavaScript:
383
+
384
+ 递归判断是否为对称二叉树:
385
+ ``` javascript
386
+ var isSymmetric = function (root ) {
387
+ // 使用递归遍历左右子树 递归三部曲
388
+ // 1. 确定递归的参数 root.left root.right和返回值true false
389
+ const compareNode = function (left ,right ){
390
+ // 2. 确定终止条件 空的情况
391
+ if (left=== null && right!== null || left!== null && right=== null ){
392
+ return false ;
393
+ }else if (left=== null && right=== null ){
394
+ return true ;
395
+ }else if (left .val !== right .val ){
396
+ return false ;
397
+ }
398
+ // 3. 确定单层递归逻辑
399
+ let outSide= compareNode (left .left ,right .right );
400
+ let inSide= compareNode (left .right ,right .left );
401
+ return outSide&& inSide;
402
+ }
403
+ if (root=== null ){
404
+ return true ;
405
+ }
406
+ return compareNode (root .left ,root .right );
407
+ };
408
+ ```
409
+ 队列实现迭代判断是否为对称二叉树:
410
+ ``` javascript
411
+ var isSymmetric = function (root ) {
412
+ // 迭代方法判断是否是对称二叉树
413
+ // 首先判断root是否为空
414
+ if (root=== null ){
415
+ return true ;
416
+ }
417
+ let queue= [];
418
+ queue .push (root .left );
419
+ queue .push (root .right );
420
+ while (queue .length ){
421
+ let leftNode= queue .shift ();// 左节点
422
+ let rightNode= queue .shift ();// 右节点
423
+ if (leftNode=== null && rightNode=== null ){
424
+ continue ;
425
+ }
426
+ if (leftNode=== null || rightNode=== null || leftNode .val !== rightNode .val ){
427
+ return false ;
428
+ }
429
+ queue .push (leftNode .left );// 左节点左孩子入队
430
+ queue .push (rightNode .right );// 右节点右孩子入队
431
+ queue .push (leftNode .right );// 左节点右孩子入队
432
+ queue .push (rightNode .left );// 右节点左孩子入队
433
+ }
434
+ return true ;
435
+ };
436
+ ```
437
+ 栈实现迭代判断是否为对称二叉树:
438
+ ``` javascript
439
+ var isSymmetric = function (root ) {
440
+ // 迭代方法判断是否是对称二叉树
441
+ // 首先判断root是否为空
442
+ if (root=== null ){
443
+ return true ;
444
+ }
445
+ let stack= [];
446
+ stack .push (root .left );
447
+ stack .push (root .right );
448
+ while (stack .length ){
449
+ let rightNode= stack .pop ();// 左节点
450
+ let leftNode= stack .pop ();// 右节点
451
+ if (leftNode=== null && rightNode=== null ){
452
+ continue ;
453
+ }
454
+ if (leftNode=== null || rightNode=== null || leftNode .val !== rightNode .val ){
455
+ return false ;
456
+ }
457
+ stack .push (leftNode .left );// 左节点左孩子入队
458
+ stack .push (rightNode .right );// 右节点右孩子入队
459
+ stack .push (leftNode .right );// 左节点右孩子入队
460
+ stack .push (rightNode .left );// 右节点左孩子入队
461
+ }
462
+ return true ;
463
+ };
464
+ ```
465
+
382
466
383
467
384
468
-----------------------
0 commit comments