非空のバイナリツリーを考えると、最大パスの合計を見つけます。
この問題のために、パスは親子接続に沿ってツリー内の任意のノードに、いくつかの開始ノードからノードの任意の配列として定義されます。パスは、少なくとも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)。 } }。