@@ -614,6 +614,7 @@ func haspathsum(root *treenode,sumnodes *[]int,targetsum int,result *[][]int){
614
614
615
615
0112.路径总和
616
616
617
+ ** 递归**
617
618
``` javascript
618
619
/**
619
620
* @param {treenode} root
@@ -643,9 +644,38 @@ let haspathsum = function (root, targetsum) {
643
644
// return haspathsum(root.left, targetsum - root.val) || haspathsum(root.right, targetsum - root.val);
644
645
};
645
646
```
647
+ ** 迭代**
648
+ ``` javascript
649
+ let hasPathSum = function (root , targetSum ) {
650
+ if (root === null ) return false ;
651
+ let nodeArr = [root];
652
+ let valArr = [0 ];
653
+ while (nodeArr .length ) {
654
+ let curNode = nodeArr .shift ();
655
+ let curVal = valArr .shift ();
656
+ curVal += curNode .val ;
657
+ // 为叶子结点,且和等于目标数,返回true
658
+ if (curNode .left === null && curNode .right === null && curVal === targetSum) {
659
+ return true ;
660
+ }
661
+ // 左节点,将当前的数值也对应记录下来
662
+ if (curNode .left ) {
663
+ nodeArr .push (curNode .left );
664
+ valArr .push (curVal);
665
+ }
666
+ // 右节点,将当前的数值也对应记录下来
667
+ if (curNode .right ) {
668
+ nodeArr .push (curNode .right );
669
+ valArr .push (curVal);
670
+ }
671
+ }
672
+ return false ;
673
+ };
674
+ ```
646
675
647
676
0113.路径总和-ii
648
677
678
+ ** 递归**
649
679
``` javascript
650
680
let pathsum = function (root , targetsum ) {
651
681
// 递归法
@@ -677,7 +707,7 @@ let pathsum = function (root, targetsum) {
677
707
return res;
678
708
};
679
709
```
680
- 113 路径总和 精简版
710
+ ** 递归 精简版**
681
711
``` javascript
682
712
var pathsum = function (root , targetsum ) {
683
713
// 递归方法
@@ -701,6 +731,41 @@ var pathsum = function(root, targetsum) {
701
731
return resPath;
702
732
};
703
733
```
734
+ ** 迭代**
735
+ ``` javascript
736
+ let pathSum = function (root , targetSum ) {
737
+ if (root === null ) return [];
738
+ let nodeArr = [root];
739
+ let resArr = []; // 记录符合目标和的返回路径
740
+ let tempArr = [[]]; // 对应路径
741
+ let countArr = [0 ]; // 对应和
742
+ while (nodeArr .length ) {
743
+ let curNode = nodeArr .shift ();
744
+ let curVal = countArr .shift ();
745
+ let curNodeArr = tempArr .shift ();
746
+ curVal += curNode .val ;
747
+ curNodeArr .push (curNode .val );
748
+ // 为叶子结点,且和等于目标数,将此次结果数组push进返回数组中
749
+ if (curNode .left === null && curNode .right === null && curVal === targetSum) {
750
+ resArr .push (curNodeArr);
751
+ }
752
+ // 左节点,将当前的和及对应路径也对应记录下来
753
+ if (curNode .left ) {
754
+ nodeArr .push (curNode .left );
755
+ countArr .push (curVal);
756
+ tempArr .push ([... curNodeArr]);
757
+ }
758
+ // 右节点,将当前的和及对应路径也对应记录下来
759
+ if (curNode .right ) {
760
+ nodeArr .push (curNode .right );
761
+ countArr .push (curVal);
762
+ tempArr .push ([... curNodeArr]);
763
+ }
764
+ }
765
+ return resArr;
766
+ };
767
+ ```
768
+
704
769
705
770
706
771
0 commit comments