bre*_*ett 8 c++ algorithm binary-tree breadth-first-search tree-traversal
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;
}
}
Run Code Online (Sandbox Code Playgroud)
上面发布的代码是我的级别订单遍历代码.这段代码对我来说很好,但我不喜欢的一件事是我明确初始化temp_node = NULL或者使用break.但它对我来说似乎不是一个好的代码.
是否有比这更好的实现或如何使这个代码更好?
Omn*_*ous 13
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在那里,没有更特殊的情况.并且压痕被清理干净,因此可以更容易理解.
或者:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
完成for循环.就个人而言,我喜欢额外的变量.变量名比一直说'q.front()`更简单.