説明:
バイナリツリーの所与の
構造体ノード{
ヴァルINTと、
;ノード*は、左
、右*ノードを
、次のノード*を
}
、その次のポインタの各々を充填するように、その右隣のノードへのポインタ。右側には次のノード、NULLにし、次のポインタの場合。
最初は、すべての次のポインタはNULLに設定されています。
回答:
前の質問に比べて、この問題は、木のための条件の欠如は、完全なバイナリツリーとして動作します。ノードが同じレベルである必要はないときに、次のノードを探しのみ
cur-現在のノードに存在する>ネクスト>左またはcur->右の位置は、2つの位置が、あなたが床に権利を持っている場合がありますので、おそらく、空になりました
最初の次のノードを探しています。具体的な再帰的なコードは次のとおりです。
クラスのソリューション{ パブリック: ノード *接続(ノード* ルート){ IF(!ルート)リターンNULL; ノード * = P-root-> 次回、 しばらく(P-は){ // 右は、最初に次のノードを探している IF( P-> 左){ P = P-> 左; ブレーク; } IF(P-> 右){ P = P-> 右; BREAK ; } P = P->次に、 } もし(root->右)root->右>次= P; もし(root->左)root->左>次= root->右?root-> 右:P。 CONNECT(ルート - > 右)。 (ルート接続 - > ;左) リターンルート。 } }。