2つのバイナリツリーを考えると、他の人はそうではありませんあなたが他をカバーするためにそれらのいずれかを置くとき、2本の木のいくつかのノードが重なっていることを想像してみてください。
あなたは、新しいバイナリツリーにマージする必要があります。マージ・ルールは、2つのノードが重なる場合には、マージされたノードの新たな値として、ノード値を合計することです。それ以外の場合は、NULLでないノードは、新しいツリーのノードとして使用されます。
例1:
入力: ツリー1ツリー2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 出力: マージツリー: 3 / \ 4 5 / \ \ 5 4 7
注意:マージ処理は、両方のツリーのルートノードから開始する必要があります。
アイデア:最終出力は左側のツリーであるため、レベルトラバース、ノードのたびに同じ位置に2つのツリーを移動するためのキューが空でない場合、ノード以下の3つの条件の全
1.唯一の子供は木が空で左左と右の木の上の対応する位置は、右の木の子は、左側のツリーの対応する位置に割り当てられている置きます
キューそれに直接空にされていない子どもに対応する位置の周り2.木は、キューにまで追加するとき、左のツリー
子供右側ツリー上の唯一の約3位置が空である、木が対応に対処する必要はありません、我々は、(X)左側の出力にツリーを必要とします
1 / * * 2 *バイナリツリーノードの定義。 3 *構造体のTreeNode { 4 * int型のval; 5 *のTreeNode *左; 6 *のTreeNode *右; 7 *ツリーノード(INT X):(NULL)左のval(X)、右(NULL){} 8 *}。 9 * / 10 クラスソリューション 11 { 12 公共: 13 のTreeNode * mergeTrees(ツリーノード* T1、ツリーノード*のT2) 14 { 15 であれば(T1 == nullptr)戻りT2。 16 もし(T2 == nullptr)戻りT1。 17 であれば(T1 == nullptr && T2 == nullptr)戻りnullptr。 18 他の 19 { 20 キュー<ツリーノード*> Q。 21 q.push(T1)。 22 q.push(T2)。 23 ながら(!q.empty()) 24 { 25 のTreeNode * L1 = q.front()。 26 q.pop()。 27 ツリーノード* L2 = q.front()。 28 q.pop()。 29 L1->ヴァル+ = L2->ヴァル; 30 であれば(L1->左= nullptr && L2->左=!nullptr) 31 { 32 q.push(L1-> 左)。 33 q.push(L2-> 左)。 34 } 35 であれば(L1->右= nullptr && L2->右=!nullptr) 36 { 37 q.push(L1-> 右)。 38 q.push(L2-> 右)。 39 } 40 であれば(L1->左== nullptr && L2->左!= nullptr) 41 { 42 L1->左= L2-> 左; 43 } 44 であれば(L1->右== nullptr && L2->右=!nullptr) 45 { 46 L1->右= L2-> 右。 47 } 48 } 49 リターンT1。 50 } 51 } 52 }。