@@ -614,6 +614,7 @@ func haspathsum(root *treenode,sumnodes *[]int,targetsum int,result *[][]int){
614614
6156150112.路径总和
616616
617+ ** 递归**
617618``` javascript
618619/**
619620 * @param {treenode} root
@@ -643,9 +644,38 @@ let haspathsum = function (root, targetsum) {
643644 // return haspathsum(root.left, targetsum - root.val) || haspathsum(root.right, targetsum - root.val);
644645};
645646```
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+ ```
646675
6476760113.路径总和-ii
648677
678+ ** 递归**
649679``` javascript
650680let pathsum = function (root , targetsum ) {
651681 // 递归法
@@ -677,7 +707,7 @@ let pathsum = function (root, targetsum) {
677707 return res;
678708};
679709```
680- 113 路径总和 精简版
710+ ** 递归 精简版**
681711``` javascript
682712var pathsum = function (root , targetsum ) {
683713 // 递归方法
@@ -701,6 +731,41 @@ var pathsum = function(root, targetsum) {
701731 return resPath;
702732};
703733```
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+
704769
705770
706771
0 commit comments