【发布时间】:2010-01-23 08:07:05
【问题描述】:
我需要打印出(访问)二叉树单层上的节点。
我不明白如何做到这一点,但我又不是很擅长一般的算法。
我知道在广度优先遍历中,您使用队列,并且首先将根节点放入队列中,然后将其出列访问它并将其子项入队,然后将第一个入队的子项出列访问它并将其子项入队等等在...
根据我的理解,除非您在创建二叉树时为每个节点分配其级别,然后在进行广度优先遍历时检查该级别,否则无法准确知道一个级别何时结束而另一个级别何时开始。
类似这样的东西(代码在 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;
}
所以我的问题是:
这是在二叉树的单层上打印节点的唯一方法吗?
还有其他方法吗?
在创建树时是否有另一种不存储关卡的方法?
【问题讨论】:
标签: algorithm binary-tree tree-traversal