gpt4 book ai didi

c++ - 二叉树的层序遍历

转载 作者:可可西里 更新时间:2023-11-01 17:09:41 29 4
gpt4 key购买 nike

void traverse(Node* root)
{
queue<Node*> q;

Node* temp_node= root;

while(temp_node)
{
cout<<temp_node->value<<endl;

if(temp_node->left)
q.push(temp_node->left);

if(temp_node->right)
q.push(temp_node->right);

if(!q.empty())
{
temp_node = q.front();
q.pop();
}
else
temp_node = NULL;
}
}

上面贴出的代码是我的关卡遍历代码。这段代码对我来说工作正常,但我不喜欢的一件事是我显式初始化 temp_node = NULL 或者我使用 break。但它对我来说似乎不是一个好的代码。

是否有比这更简洁的实现或者我怎样才能使这段代码更好?

最佳答案

void traverse(Node* root)
{
queue<Node*> q;

if (root) {
q.push(root);
}
while (!q.empty())
{
const Node * const temp_node = q.front();
q.pop();
cout<<temp_node->value<<"\n";

if (temp_node->left) {
q.push(temp_node->left);
}
if (temp_node->right) {
q.push(temp_node->right);
}
}
}

到此为止,不再有特殊情况。并清理了缩进,以便更容易理解。

或者:

void traverse(Node* root)
{
queue<Node*> q;

if (!root) {
return;
}
for (q.push(root); !q.empty(); q.pop()) {
const Node * const temp_node = q.front();
cout<<temp_node->value<<"\n";

if (temp_node->left) {
q.push(temp_node->left);
}
if (temp_node->right) {
q.push(temp_node->right);
}
}
}

作为 for 循环完成。就个人而言,我喜欢额外的变量。变量名是一个比一直说“q.front()”更好的速记。

关于c++ - 二叉树的层序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589716/

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