二分木の単一レベルでノードを印刷(訪問)する必要があります。
これがどのように行われるかはわかりませんが、一般的なアルゴリズムについてはあまり熟練していません。
幅優先探索では、キューを使用し、ルートノードをキューに入れることから始めて、ルートノードをデキューして子をエンキューし、最初にエンキューされた子をキューから外して、子をエンキューすることを知っています。 on ...
そして私の理解では、バイナリツリーが作成されたときに各ノードにレベルを割り当ててから、幅優先探索を実行しているときにレベルを確認しない限り、あるレベルがいつ終了し、別のレベルがいつ開始するかを正確に知ることは不可能です。 。
このようなもの(コードはPHPですが、これはPHP関連の質問ではありません。これは一般的なアルゴリズム関連の質問です。これは、各ノードが追加されたときにノードのレベルを格納するバイナリツリーにノードを追加する関数の一部です。 )::
if($this->root == null)
{
$this->root = $node;
$this->root->level = 1;
return;
}
$nextnode = $this->root;
$level = 1;
while (true)
{
if($node->value > $nextnode->value)
{
if($nextnode->right != null)
{
$nextnode = $nextnode->right;
$level++;
}
else
{
$nextnode->right = $node;
$nextnode->right->level = ++$level;
return;
}
}
else if($node->value < $nextnode->value)
{
if($nextnode->left != null)
{
$nextnode = $nextnode->left;
$level++;
}
else
{
$nextnode->left = $node;
$nextnode->left->level = ++$level;
return;
}
}
else if($node->value == $nextnode->value)
return;
}
だから私の質問は:
これは、バイナリツリーの単一レベルでノードを印刷する唯一の方法ですか?
別の方法はありますか?
ツリーを作成するときにレベルを保存せずに別の方法はありますか?