トピック:
バイナリツリーノード値のすべてのパスを印刷するための入力と進整数は、整数が入力されます。
パスの形成を介してリーフノードまでのルートノードから下始まります。
アイデア:
前文では、順番に、ツリーを横断した後、唯一の先行順走査は、最初のルートノードを訪問することです。
使用前に先行予約がノードにアクセスする場合、ノードは、パス、およびノードの累積値に加算されます。
ノードがリーフノードと整数を入力するだけで同じパスとノード値であれば、電流経路は要件を満たすために、我々はそれをプリントアウト。
現在のノードがリーフノードでない場合は、その子ノードにアクセスし続けます。現在の訪問が終了した後、再帰関数は、自動的にその親に戻ります。だから我々はただパスが親の親を返すへのルートからのパスであることを確認するために、関数は、現在のノードと現在のノードの値を減算へのパスに出る前に削除します。
深さ優先探索
輸入は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 ); } } }