124【ハード】。バイナリツリーの最大パス合計

非空のバイナリツリーを考えると、最大パスの合計を見つけます。

この問題のために、パスは親子接続に沿ってツリー内の任意のノードに、いくつかの開始ノードからノードの任意の配列として定義されます。パスは、少なくとも1つのノードが含まれている必要があり、ルートを通過する必要はありません。

例1:

入力:[1,2,3] 

       1 
      / \ 
     2 3 

出力:6

例2:

入力:[-10,9,20、NULL、NULL、15,7] 

   -10 
   / \ 
  9 20 
    / \ 
   15 7 

出力:42


/ * * 
 *バイナリツリーノードの定義。
 *構造体のTreeNode { 
 * INTヴァル。
 *のTreeNode *左; 
 *のTreeNode *右; 
 *ツリーノード(int型X):(NULL)左のval(X)、右(NULL){} 
 *}。
 * / 
クラスソリューション{
 プライベートint型のソリューション(TreeNodeの*ルート、INT&最高){   // 自分自身のソリューション
        であれば(!ルート)の戻り 0 ;
        int型(root-> left_sum = root->ヴァル+ソリューション、最高の左)。
        int型 right_sum = root->ヴァル+溶液(root-> 右、最高の);
        int型curve_sum = left_sum + right_sum - root-> valの; 
        最良 = MAX({最高left_sum、right_sum、curve_sum、root-> ヴァル})。
        
        戻り MAX({left_sum、right_sum、ルート- > ヴァルを})。
    } 
    
公共INT maxPathSum(ツリーノード*ルートは){   // それが元の関数である
        INT最良= INT_MIN。
        int型のeval = 溶液(根、最高の);
        返す最大値を(最高のeval)。
    } 
    
}。

 

おすすめ

転載: www.cnblogs.com/sherry-yang/p/11421704.html