深さ優先探索(DFS)のLeetcodeテーマ別-129。(葉の数に合計ルート)リーフノードデジタル和にルーツ

深さ優先探索(DFS)のLeetcodeテーマ別-129。(葉の数に合計ルート)リーフノードデジタル和にルーツ

問題解決の深さ優先探索の詳細、クリックしてください


バイナリツリー与え、格納されている各ノードの  0-9 ルートから各リーフノードに、数がパスの数を表します。

例えば、リーフ・ノードへのルートからのパス  1->2->3 デジタルを表します  123

すべての数値の和によって生成されたリーフノードへのルートから算出しました。

説明:リーフノードは、ノードが子ノードを持たないです。

例1:

入力:[1,2,3] 
    1 
   / \ 
  2 3 
出力:25 
説明:
ルートからのパスのリーフノードには、1->2数を表す12
ルートからのパスのリーフノードに1->3番号を表す13
このように、デジタル合計= 12 + 13 =を25

例2:

入力:[4,9,0,5,1] 
    4 
   / \ 
  90 
 / \ 
51 
出力:1026 
説明:
ルートからのパスのリーフノードに4->9->5番号495を表す
パスのリーフノードにルートからは4->9->1数491を表し
にルートからリーフ・ノード・パスは、4->0数40に表す
したがって、デジタル和+ = 495 + 40 = 491 1026

分析:ツリー全体を検索し、ノードが葉ノード、追加ANSが行く値であれば、現在のノードの値は、アップステッチされています。
/ ** 
 *バイナリツリーノードの定義。
 *公共のクラスのTreeNode { 
 * int型のval; 
 *のTreeNodeは左。
 *ツリーノードを右。
 *ツリーノード(INT X){ヴァル= X。} 
 *} 
 * / 
クラスソリューション{
     INT ANS = 0 公共 INT sumNumbers(ツリーノードのルート){
         場合(ルート== NULL戻り 0 
        DFS(ルート、 "" );
        戻るANSを。
    } 
    公共 ボイドDFS(ツリーノードのノード、文字列NUM){
         場合(ノード== NULL){
             返します
        } 
        
        であれば(node.left == NULL && node.right == NULL ){ 
            ANS + = Integer.valueOf(NUM + node.val)。
            返します
        } 
        DFS(node.left、NUM + node.val)。
        DFS(node.right、NUM + node.val)。
    } 
}

 




 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11367092.html