leetcode 337強盗IIIのjava

トピック:

通りや家を奪った後、最終ラップの完了後、彼は泥棒が新しい分野を盗むことができます発見しました。領域は、我々が呼んで唯一の入り口、持っている「ルートを。」「ルート」、そして唯一の家それに関連する「親」の家に加えて。いくつかの偵察後、賢い泥棒は「この場所は、すべての家がバイナリツリーに似て配置されている。」ことを実現しました 両院が直接接続されている場合は、同じ夜、家のアラームを奪いました。

アラームを触れることなく計算し、泥棒は、夜の最大量を盗むことができます。

例1:

入力:[3,2,3、ヌル、3、NULL、1]

3
/ \
2 3
\ \
3 1

出力:7
説明:夜を盗む盗人が最大量= 3 + 3 + 1 = 7であることができる
(実施例2)

入力:[3,4,5,1,3、ヌル、1]

  3
/ \
4
\ \ /
1 3 1

出力:9
説明:夜盗む盗人= 4 + 5 = 9最大量とすることができます。

問題解決:

/ ** 
 *バイナリツリーノード定義のA。
 *パブリッククラスツリーノード{ 
 * INTヴァル; 
 *ツリーノードは、左; 
 *ツリーノード右; 
 *ツリーノード(INT X){X =ヴァル;} 
 *} 
 * / 
クラスソリューション{
     公共 のint ロブ(TreeNodeのルート){
         / * 
        あなたは、私が今まで見た中で最も賢い泥棒だ
        * / 
        / * 
        //再帰的思考(いないの深い再帰関数本体、ちょうど再帰関数の機能ということを知っている、と再帰のうち境界条件を見つけるために)
        //アイデア:
        強盗強盗+左右のサブツリー+奪う左と右のサブツリーの右の子ノードの子の左ノードのノードのために盗むことができます//最大量
        //そのノード強盗強盗の左側のサブツリーノードを+最大値の右サブツリー
        1005ms理由を行う際に多くの繰り返し計算が行われている//が使用されているが、動的計画法を用いて解くことができる
        (ルート== NULL)戻り0の場合 。 
        int型のVal = 0。
        IF(!= nullのroot.left)+ =ヴァルロブ(root.left.left)+ロブ(root.left.right); 
        IF(!= nullのroot.right)+ =ヴァルロブ(root.right.left)ロブ+(root.right.right); 
        ; Math.max(ロブ(root.left)+ロブ(root.right)、ヴァル+のroot.val)を返す
        * / 
        
        // 動的計画
         // アイデアは:
         // 定義配列RES、長さ2、RES [0]ノードは、得られる最大値を取得しないことを示し、RES [1]ノード強盗最大得られることを示し
         // rがために、ルートノードである:方法ヘルパー(登録商標)を意味しますツリーは、ルートノードは、強盗強盗利用可能な最大ルート戻らない
         // ときに2msの実行
        INT [] RES = ヘルパー(ルート);
         戻り Math.max([1 RES [0]、RESを;])
    } 
    公共 INT []ヘルパー(ツリーノードR&LT){
         IF(R&LT ==NULLを返す 新しい新しい INT [2]; // 境界条件を、rは外、nullである
        INT [] =左ヘルパー(r.left); // r.left算出強盗ルートをルートとするツリーの(R .LEFT)はなく、ルートノードの最大量を得るために、強盗。 
         // 左[0]最大量r.lrftが利用できなかったつかむために、左の[1]、右[r.left強盗に利用可能な最大量と比較】分析同様に
        値int [] =右ヘルパー(r.rightを);
         int型 = [] RESを新しい新しい INT 2 [ ]; 
        RES [ 0] = Math.max(左の[0]、左の[1])+ Math.max (右の[0]、右[1]); // 計算しない奪う利用可能な最大電流量(その左と右の部分木を容易につかむことができる)の根 
        RES [1] + = r.val左[0] +右[0]; // 最大量の利用可能な強盗ルート計算(ここでは、ルートノードの左及び右サブツリーを奪われていない)場合は
        リターン解像度; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/yanhowever/p/11655189.html