22タイトル<安全プランを証明>

トピック:

バイナリツリーノード値のすべてのパスを印刷するための入力と進整数は、整数が入力されます。

パスの形成を介してリーフノードまでのルートノードから下始まります。

アイデア:

前文では、順番に、ツリーを横断した後、唯一の先行順走査は、最初のルートノードを訪問することです。

使用前に先行予約がノードにアクセスする場合、ノードは、パス、およびノー​​ドの累積値に加算されます。

ノードがリーフノードと整数を入力するだけで同じパスとノード値であれば、電流経路は要件を満たすために、我々はそれをプリントアウト。

現在のノードがリーフノードでない場合は、その子ノードにアクセスし続けます。現在の訪問が終了した後、再帰関数は、自動的にその親に戻ります。だから我々はただパスが親の親を返すへのルートからのパスであることを確認するために、関数は、現在のノードと現在のノードの値を減算へのパスに出る前に削除します。

深さ優先探索

輸入はjava.util.ArrayList;
輸入はjava.util.List; 

パブリック クラスTwentySecond {
     パブリック クラスBinarySearchTreeNode {
         int型のval; 
        BinarySearchTreeNodeは左。
        右BinarySearchTreeNode; 
    } 
    パブリック 静的 ボイド findPath(BinarySearchTreeNode根、INT expectedSum){ 
        リスト <整数>リスト= 新規のArrayList <> ();
        もし(!ルート= NULL ){ 
            findPath(根、 0 、expectedSum、リスト)。
        }
    }

    公共の 静的な 無効 FindPath(BinarySearchTreeNodeルート、int型 curSum、int型 expectedSum、一覧<整数> 結果){
         // ノードが空に進みない場合には
        IF(ルート!= nullの){
             // プラスノードの現在の値が 
            curSum + = root.val;
             // 現在のノードエンキュー
            result.add(root.val);
             // 現在の値は、所望のノードよりも少ないであれば
            IF(curSum < expectedSum){
                 // 再帰プロセス左サブツリー
                findPath(root.left 、curSum、expectedSum、結果);
                 // 再帰プロセスの右部分木
                FindPath(root.right、curSum、expectedSum、結果); 
            } 
            // 現在及び所望の等しいなら
             IF(curSum == expectedSum){
                 // 現在のノードがリーフノードであり、出力
                IF(= root.left = NULL && root.right == NULL ){ 
                    System.out.printlnは(結果); 
                } 
            } 
            // 現在のノードの削除 
            result.remove(result.sizeを() - 1 ); 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/HarSong13/p/11334283.html