我需要打印(访问)二叉树的单个级别上的节点。
我不明白这是如何做到的,但我再次对算法不熟练。
我知道,在广度优先遍历中,您使用一个队列,并且首先将根节点放入队列中,然后您将它列入队列并将其排入子队列,然后您将第一个被取消的子队列出队列,然后将其排入子队列等等......
据我所知,这使得不可能确切地知道何时一个层次结束,另一个层次开始,除非您在创建二叉树时将其分配给每个节点,然后在您执行该操作时检查层次广度优先遍历。在二叉树的单个给定级别上打印所有元素
像这样的东西(代码是在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;
}
所以我的问题是:
这是印上一个二叉树的单级节点的唯一途径?
还有别的办法吗?
创建树时没有存储关卡还有其他方法吗?
需求第一和第二条款切换或有一个空指针引用可能。 首先访问左侧分支也更自然! – 2010-01-23 10:41:34
完成并完成。谢谢你,先生。 – 2010-01-23 21:10:54