我有一棵二叉树:
struct node
{
int n; // value of node
struct node *left; // left subtree
struct node *right; // right subtree
struct node *level; // level pointer (node “to the right”)
}
最初,级别字段设置为NULL。
我毫不费力地编写了一个函数,该函数将在一棵树中的同一层链接所有节点(不仅来自示例,而且来自任何给定的树)。
void linkSameLevel(struct node *t);
对于包含n个节点的深度为d的树,我如何知道函数的运行时间和内存使用情况?
这是我所拥有的:
这是我需要的:
为此,可以使用两个队列和BFS遍历。并维护两个指针currNode和prevNode。
prevNode = null
。currNode
。在第二季度中推送currNode的子代。prev != null
,则prevNode
与链接currNode
。prevNode = currNode
。当Q1为空时。将Q2设置为Q1,将Q1设置为Q2(新的Q2将为空)并设置prevNode = null
。转到步骤3。
void linkSameLevel(node *root)
{
if (root = null)
return;
queue<node *> Q1, Q2;
Q1.push(root);
node *currNode; node *prevNode;
prevNode = null;
do
{
while (!Q1.empty())
{
node *currNode = Q1.pop();
Q2.push(currNode.left); Q2.push(currNode.right);
if (prevNode != null)
prevNode.level = currNode;
prevNode = currNode;
}
swap(Q1, Q2);
} while (!Q1.empty);
}
还可以看一下水平订单遍历
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句