<Tree.PreOrder> DFS 113、129

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)。
    }
}

 

おすすめ

転載: www.cnblogs.com/Afei-1123/p/11897666.html