バイナリツリーを考えます
構造体ノード{ int型のval; ノード*左; ノード*右; 次のノード*; }
その右隣のノードを指し示すように、それぞれ次のポインタを取り込みます。何のすぐ隣のノードが存在しない場合は、次のポインタがに設定する必要があります NULL
。
最初は、すべての次のポインタがに設定されています NULL
。
ファローアップ:
- あなただけの一定の余分なスペースを使用することができます。
- 再帰的なアプローチは、あなたがこの問題のための余分なスペースとしてカウントされません暗黙のスタック領域をとることができる、罰金です。
例1:
入力:ルート= [1,2,3,4,5、ヌル、7] 出力:[1、#、2,3、#、4,5,7、#] 説明:上記の二分木(図A)が与えられると、関数がちょうど図B.ザのように、その右隣のノードを指し示すように、それぞれ次のポインタを移入する必要があり、次のポインタによって接続されたように、出力が「#で、レベル順であるシリアライズ「各レベルの終わりを意味します。
/ * //ノードの定義。 クラスノード{ 公共int型のval; 公共のノードが左; 公共のノードを右。 次のパブリック・ノード。 パブリック・ノード(){} パブリック・ノード(int型_val){ ヴァル= _val。 } パブリック・ノード(INT _val、ノード_left、ノード_right、ノード_next){ ヴァル= _val。 左= _left。 右= _right。 次回= _next。 } }。 * / クラスソリューション{ 公共のノードの接続(ノードルート){ ノードCUR = ルート。 ノードPREV = nullを。 ノードヘッド = nullを。 一方、(CUR!= NULL ){ 一方(CUR!= NULL ){ 場合(cur.left!= NULL ){ 場合(PREV!= NULL ){ prev.next = cur.left。 } 他{ ヘッド = cur.left。 } PREV = cur.left。 } もし(cur.right!= nullの){ 場合(PREV!= nullの){ prev.next = cur.right。 } 他{ ヘッド = cur.right。 } PREV = cur.right。 } CUR = cur.next。 } CUR = ヘッド。 ヘッド = nullを。 PREV = nullを。 } リターンルート。 } }