[617]二つのバイナリツリーをマージ

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 }。

おすすめ

転載: www.cnblogs.com/Swetchine/p/11247895.html