A. 問題の説明
バイナリツリーが与えられると、ルートから各リーフノードに、デジタル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
/ \
9 0
/ \
5 1
出力:1026
説明:
リーフノード4-> 9-> 5へのルートからのパスは、数495を表します。
リーフノード4-> 9-> 1のルートからのパスは、数491を表します。
リーフノード4-> 0のルートからのパスは、数40を表します。
このように、デジタル合計は、495 + 491 + 40 = 1026 =。
II。問題解決のためのアイデア
ボディアイデア:メソッドは、反復配列トラバーサル+解決です。
ステップA:再帰関数の構築(ルートのルート・ノードが現在のノードの値にルートから現在の代表的な数を表します)
ステップ2:ルートノード番号の値場合、ルートノードが最初の再帰関数に*、子ノードがあるかどうかを10 +新しい子ノードを決定し、子ノードがトラバース完了するまで、層ごとにすべての値を返します。
III。結果
実行時:1ミリ秒は、Javaの提出内のすべてのユーザーの63.67パーセントを打ちます
メモリ消費量:34.5メガバイトには、Javaの提出内のすべてのユーザーの47.62パーセントを破りました
IV。Javaコード
クラスソリューション{ 公共 のint sumNumbers(ツリーノードのルート){ 場合(ルート== NULL ){ 戻り 0 。 } 他{ 戻りはgetNumber(根、root.val)を、 } } 公共 のintはgetNumber(ツリーノードのルート、INT 数){ 場合(root.left == NULL && root.right == NULL ){ 戻り番号; } INT templeft = 0 。 int型tempright = 0 ; もし(!root.left = NULL ){ templeft =はgetNumber(root.left、root.left.val +の数* 10 )。 } もし(!root.right = NULL ){ tempright =はgetNumber(root.right、root.right.val +の数* 10 )。 } 戻り templeft + temprightと、 } }