129タイトル:数字のノード合計に根や葉

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と、
        
    } 
}

 

 

おすすめ

転載: www.cnblogs.com/xiaobaidashu/p/11939912.html