//良い裁判官であることを、それを再帰が、最終的には、条件再帰に、例えば、リーフノードへの完全なパスです、それは子ノードについて言いたいことある空で、この時間root.valは==ターゲットが見つかりました。リストを表し、その後、戻ります。
しかし、いくつかのケースでは、例えば、ヌルノードに遭遇しましたので、私は、ターゲット・root.valに直接使用していなかったので、私たちは直接、前のレベルに戻るので、あなたは、リストに値を追加する必要があり、戻ることはできません私たちは、私たちは、要素のリストを追加するとき、またはないノード要素前のレベルに戻るには、再帰的な時間があるたびに、これは注目すべき点であり、リストの最後の要素から削除されます
それはリーフノードではなく、この時間root.val> =ターゲットは、つまり、他の下、我々は再帰的に直接戻って続けることができない場合は、存在し、
**それともオフにノックされるのval値に直接来ることができるので、時にはあなたは軽微での追加の値をリストする必要はありませんが、これは、ターゲット== 0の終わりです。
1つの インポートjava.util.ArrayListの。 2 / ** 3 パブリッククラスツリーノード{ 4 INTヴァル= 0。 5 ツリーノードは、= NULLを残しました。 6 ツリーノード右= NULL; 7 8 公共ツリーノード(int型のval){ 9 this.val =ヴァル。 10 11 } 12 13 } 14 * / 15 パブリック クラスソリューション{ 16 のArrayList <のArrayList <整数>> RES = 新規のArrayList <> (); 17 公共のArrayList <ArrayListを<Integer型>> FindPath(TreeNodeの根、int型のターゲット){ 18 のArrayList <整数>リスト= 新規のArrayList <> (); 19 であれば(ルート==のヌル) 20の リターンRES。 21 ヘルパー(ルート、目標、リスト)。 22 リターンのres; 23 } 24 公共 ボイドヘルパー(ツリーノードのルート、int型のターゲット、のArrayList <整数> のリスト) 25 { 26 であれば(ルート== NULL ) 27 { 28 list.add(0 )。 29 返します。 30 } 31 であれば(root.left == NULL && root.right == NULL ) 32 { 33 であれば(root.val == ターゲット) 34 { 35 list.add(root.val)。 36 res.add(新しいのArrayList <Integer型> (リスト)); 37 リターン; 38 } 39 他の 40 { 41 list.add(0 )。 42 リターン; 43 } 44 } 45 であれば(root.val < ターゲット) 46 { 47 list.add(root.val)。 48 ヘルパー(root.left、標的- root.val、リスト)。 49 list.remove(はlist.size() - 1 )。 50 ヘルパー(root.right、標的- root.val、リスト)。 51 list.remove(はlist.size() - 1 )。 52 } 53 他の 54 { 55 list.add(0 )。 56 リターン; 57 } 58 リターン; 59 60 } 61 }