113パスの合計II
使用DFS三つの要素、1つの輸出、輸出2、解体は、時にロールバックパスに戻って覚えています。
クラスのソリューション{ 公共リスト<リスト<Integer型>> pathSum(TreeNodeの根、int型の合計){ リスト <リスト<Integer型>> RES = 新しい ArrayListを<> (); DFS(RES、新しいのArrayList <Integer型> ()、合計、根); リターンのres; } プライベート 無効 DFS(一覧<一覧<整数>>解像度、一覧<整数>パス、int型の合計、のTreeNodeルート){ 場合(ルート== nullの)リターン。 合計 - = root.val。 // リーフノード? もし(root.left == NULL && root.right == NULL ){ 場合(和== 0 ){ (root.val)path.add。 res.add(新しいのArrayList <Integer型> (パス)); path.remove(path.size() - 1 )。 } リターン; } // 解体 path.add(root.val)。 DFS(RES、パス、和、root.left)。 DFS(RES、パス、和、root.right)。 path.remove(path.size() - 1 )。 } }
葉の番号に129合計ルート
この質問は、各ノードの数の単純な合計ではなく、新しい子ノードの数に直面したとき、その後、デジタル位相親ノードの後に10倍に拡大しなければならないので、DFSは、再帰の使用が解決しようとしますプラス。リーフノードがトラバースされている場合は、電流が累積加算結果を返します。そうでない場合、機能のその左の子ノードが呼び出され、それぞれ、二つの結果は、戻りに加算され、
クラスソリューション{ 公共 のint sumNumbers(ツリーノードのルート){ 戻り DFS(0 、根); } プライベート int型の DFS(INTの和、ツリーノードのルート){ 場合(ルート== NULL)戻り 0 。 合計 =合計* 10 + root.val。 もし(root.left == NULL && root.right == NULL ){ 戻り和。 } リターン DFS(合計、root.left)+ DFS(合計、root.right)。 } }