gpt4 book ai didi

c++ - 在输出中显示二叉树的空子节点

转载 作者:行者123 更新时间:2023-11-28 05:27:34 26 4
gpt4 key购买 nike

我有一个打印二叉树层次的方法:

template<class BTNode>
void breadthfirstByLevel(BTNode* node_ptr) {
if (node_ptr == NULL)
{
return;
}
queue<BTNode *> q1;
queue<BTNode *> q2;

q1.push(node_ptr);

while (!q1.empty() || !q2.empty()) {
while (!q1.empty())
{
node_ptr = q1.front();
q1.pop();
cout << node_ptr->data() << " ";
if (node_ptr->left() != NULL)
{
q2.push(node_ptr->left());
}

if (node_ptr->right() != NULL)
{
q2.push(node_ptr->right());
}
}
cout << endl;
while (!q2.empty())
{
node_ptr = q2.front();
q2.pop();
cout << node_ptr->data() << " ";

if (node_ptr->left() != NULL)
{
q1.push(node_ptr->left());
}
if (node_ptr->right() != NULL)
{
q1.push(node_ptr->right());
}
}
cout << endl;
}
}

我检查当前节点的子节点是否为空并将它们插入队列。我怎样才能在关卡输出中显示“NULL”而不是跳过它并且不打印任何内容?

最佳答案

你从队列中取出下一个节点的指针来打印数据。如果此节点有子节点(即指向子节点的指针不为空),则将它们放入队列中。这意味着在队列中永远不会有 nullptr

您可以使用该算法的变体来解决这个问题:您可以在没有 child 的情况下将 nullptr 放入队列中。但是你必须确保当你从队列中获取指针时不要取消引用它们。

...
while (!q1.empty() || !q2.empty()) {
while (!q1.empty())
{
node_ptr = q1.front();
q1.pop();
if (node_ptr==nullptr) { // if nullptr was on queue
cout << "<NULL> "; // tell it
}
else { // otherwise handle data and queue its children
cout << node_ptr->data() << " ";
q2.push(node_ptr->left()); // push even if it's nullptr
q2.push(node_ptr->right()); // " "
}
}
... // then same for q2
}

关于c++ - 在输出中显示二叉树的空子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com