深さ優先探索(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 = 4911026
。
分析:ツリー全体を検索し、ノードが葉ノード、追加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)。 } }